|
|
|
@ -23,9 +23,10 @@
|
|
|
|
|
var payload = [deviceIdentifier];
|
|
|
|
|
var operationTable;
|
|
|
|
|
if (deviceType == "ios") {
|
|
|
|
|
var serviceUrl = "/ios/operation/deviceinfo";
|
|
|
|
|
serviceUrl = "/ios/operation/deviceinfo";
|
|
|
|
|
} else if (deviceType == "android") {
|
|
|
|
|
var serviceUrl = "/mdm-android-agent/operation/device-info";
|
|
|
|
|
//var serviceUrl = "/mdm-android-agent/operation/device-info";
|
|
|
|
|
serviceUrl = "/api/device-mgt/android/v1.0/admin/devices/info";
|
|
|
|
|
}
|
|
|
|
|
if (serviceUrl) {
|
|
|
|
|
invokerUtil.post(serviceUrl, payload,
|
|
|
|
@ -61,137 +62,224 @@
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
function loadOperationsLog(update) {
|
|
|
|
|
var operationsLog = $("#operations-log");
|
|
|
|
|
var deviceListingSrc = operationsLog.attr("src");
|
|
|
|
|
var deviceId = operationsLog.data("device-id");
|
|
|
|
|
var deviceType = operationsLog.data("device-type");
|
|
|
|
|
|
|
|
|
|
$.template("operations-log", deviceListingSrc, function (template) {
|
|
|
|
|
var serviceURL = "/devicemgt_admin/operations/" + deviceType + "/" + deviceId;
|
|
|
|
|
|
|
|
|
|
var successCallback = function (data) {
|
|
|
|
|
data = JSON.parse(data);
|
|
|
|
|
$('#operations-spinner').addClass('hidden');
|
|
|
|
|
var viewModel = {};
|
|
|
|
|
viewModel.operations = data;
|
|
|
|
|
if (data.length > 0) {
|
|
|
|
|
var content = template(viewModel);
|
|
|
|
|
if (!update) {
|
|
|
|
|
$("#operations-log-container").html(content);
|
|
|
|
|
operationTable = $('#operations-log-table').datatables_extended();
|
|
|
|
|
} else {
|
|
|
|
|
$('#operations-log-table').dataTable().fnClearTable();
|
|
|
|
|
for (var i = 0; i < data.length; i++) {
|
|
|
|
|
var status;
|
|
|
|
|
if (data[i].status == "COMPLETED") {
|
|
|
|
|
status = "<span><i class='fw fw-ok icon-success'></i> Completed</span>";
|
|
|
|
|
} else if (data[i].status == "PENDING") {
|
|
|
|
|
status = "<span><i class='fw fw-warning icon-warning'></i> Pending</span>";
|
|
|
|
|
} else if (data[i].status == "ERROR") {
|
|
|
|
|
status = "<span><i class='fw fw-error icon-danger'></i> Error</span>";
|
|
|
|
|
} else if (data[i].status == "IN_PROGRESS") {
|
|
|
|
|
status = "<span><i class='fw fw-ok icon-warning'></i> In Progress</span>";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$('#operations-log-table').dataTable().fnAddData([
|
|
|
|
|
data[i].code,
|
|
|
|
|
status,
|
|
|
|
|
data[i].createdTimeStamp
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
invokerUtil.get(serviceURL,
|
|
|
|
|
successCallback, function (message) {
|
|
|
|
|
console.log(message);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var operationsLogTable = "#operations-log-table";
|
|
|
|
|
if (update) {
|
|
|
|
|
operationTable = $(operationsLogTable).DataTable();
|
|
|
|
|
operationTable.ajax.reload(false);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
operationTable = $(operationsLogTable)
|
|
|
|
|
.datatables_extended({
|
|
|
|
|
serverSide: true,
|
|
|
|
|
processing: false,
|
|
|
|
|
searching: false,
|
|
|
|
|
ordering: false,
|
|
|
|
|
pageLength: 10,
|
|
|
|
|
order: [],
|
|
|
|
|
ajax: {
|
|
|
|
|
url: context + "/api/operation/paginate",
|
|
|
|
|
data: {
|
|
|
|
|
deviceId: deviceIdentifier,
|
|
|
|
|
deviceType: deviceType
|
|
|
|
|
},
|
|
|
|
|
dataSrc: function (json) {
|
|
|
|
|
$("#operations-spinner").addClass(
|
|
|
|
|
"hidden");
|
|
|
|
|
$("#operations-log-container").empty();
|
|
|
|
|
return json.data;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
columnDefs: [
|
|
|
|
|
{targets: 0, data: "code"},
|
|
|
|
|
{
|
|
|
|
|
targets: 1,
|
|
|
|
|
data: "status",
|
|
|
|
|
render: function (status) {
|
|
|
|
|
var html;
|
|
|
|
|
switch (status) {
|
|
|
|
|
case "COMPLETED" :
|
|
|
|
|
html =
|
|
|
|
|
"<span><i class='fw fw-ok icon-success'></i> Completed</span>";
|
|
|
|
|
break;
|
|
|
|
|
case "PENDING" :
|
|
|
|
|
html =
|
|
|
|
|
"<span><i class='fw fw-warning icon-warning'></i> Pending</span>";
|
|
|
|
|
break;
|
|
|
|
|
case "ERROR" :
|
|
|
|
|
html =
|
|
|
|
|
"<span><i class='fw fw-error icon-danger'></i> Error</span>";
|
|
|
|
|
break;
|
|
|
|
|
case "IN_PROGRESS" :
|
|
|
|
|
html =
|
|
|
|
|
"<span><i class='fw fw-ok icon-warning'></i> In Progress</span>";
|
|
|
|
|
break;
|
|
|
|
|
case "REPEATED" :
|
|
|
|
|
html =
|
|
|
|
|
"<span><i class='fw fw-ok icon-warning'></i> Repeated</span>";
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return html;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
targets: 2,
|
|
|
|
|
data: "createdTimeStamp",
|
|
|
|
|
render: function (date) {
|
|
|
|
|
var value = String(date);
|
|
|
|
|
return value.slice(0, 16);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"createdRow": function (row, data) {
|
|
|
|
|
$(row).attr("data-type", "selectable");
|
|
|
|
|
$(row).attr("data-id", data["id"]);
|
|
|
|
|
$.each($("td", row),
|
|
|
|
|
function (colIndex) {
|
|
|
|
|
switch (colIndex) {
|
|
|
|
|
case 1:
|
|
|
|
|
$(this).attr(
|
|
|
|
|
"data-grid-label",
|
|
|
|
|
"Code");
|
|
|
|
|
$(this).attr(
|
|
|
|
|
"data-display",
|
|
|
|
|
data["code"]);
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
$(this).attr(
|
|
|
|
|
"data-grid-label",
|
|
|
|
|
"Status");
|
|
|
|
|
$(this).attr(
|
|
|
|
|
"data-display",
|
|
|
|
|
data["status"]);
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
$(this).attr(
|
|
|
|
|
"data-grid-label",
|
|
|
|
|
"Created Timestamp");
|
|
|
|
|
$(this).attr(
|
|
|
|
|
"data-display",
|
|
|
|
|
data["createdTimeStamp"]);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function loadApplicationsList() {
|
|
|
|
|
var applicationsList = $("#applications-list");
|
|
|
|
|
var deviceListingSrc = applicationsList.attr("src");
|
|
|
|
|
var applicationListingTemplate = applicationsList.attr("src");
|
|
|
|
|
var deviceId = applicationsList.data("device-id");
|
|
|
|
|
var deviceType = applicationsList.data("device-type");
|
|
|
|
|
|
|
|
|
|
$.template("application-list", deviceListingSrc, function (template) {
|
|
|
|
|
var serviceURL = "/devicemgt_admin/operations/" + deviceType + "/" + deviceId + "/apps";
|
|
|
|
|
$.template("application-list", applicationListingTemplate, function (template) {
|
|
|
|
|
var serviceURL = "/api/device-mgt/v1.0/devices/" + deviceType + "/" + deviceId + "/applications";
|
|
|
|
|
invokerUtil.get(
|
|
|
|
|
serviceURL,
|
|
|
|
|
// success-callback
|
|
|
|
|
function (data, textStatus, jqXHR) {
|
|
|
|
|
if (jqXHR.status == 200 && data) {
|
|
|
|
|
data = JSON.parse(data);
|
|
|
|
|
$("#apps-spinner").addClass("hidden");
|
|
|
|
|
if (data.length > 0) {
|
|
|
|
|
for (var i = 0; i < data.length; i++) {
|
|
|
|
|
data[i]["name"] = decodeURIComponent(data[i]["name"]);
|
|
|
|
|
data[i]["platform"] = deviceType;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var successCallback = function (data) {
|
|
|
|
|
data = JSON.parse(data);
|
|
|
|
|
$('#apps-spinner').addClass('hidden');
|
|
|
|
|
var viewModel = {};
|
|
|
|
|
if (data != null && data.length > 0) {
|
|
|
|
|
for (var i = 0; i < data.length; i++) {
|
|
|
|
|
data[i].name = data[i].name.replace(/[^\w\s]/gi, ' ');
|
|
|
|
|
data[i].name = data[i].name.replace(/[0-9]/g, ' ');
|
|
|
|
|
var viewModel = {};
|
|
|
|
|
viewModel["applications"] = data;
|
|
|
|
|
viewModel["deviceType"] = deviceType;
|
|
|
|
|
var content = template(viewModel);
|
|
|
|
|
$("#applications-list-container").html(content);
|
|
|
|
|
} else {
|
|
|
|
|
$("#applications-list-container").
|
|
|
|
|
html("<div class='message message-info'><h4><i class='icon fw fw-info'></i>No applications found.</h4>" +
|
|
|
|
|
"<p>Please try refreshing the list in a while.</p></div>");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
viewModel.applications = data;
|
|
|
|
|
viewModel.deviceType = deviceType;
|
|
|
|
|
if (data.length > 0) {
|
|
|
|
|
var content = template(viewModel);
|
|
|
|
|
$("#applications-list-container").html(content);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
invokerUtil.get(serviceURL,
|
|
|
|
|
successCallback, function (message) {
|
|
|
|
|
console.log(message);
|
|
|
|
|
},
|
|
|
|
|
// error-callback
|
|
|
|
|
function () {
|
|
|
|
|
$("#applications-list-container").
|
|
|
|
|
html("<div class='panel-body'><br><p class='fw-warning'> Loading application list " +
|
|
|
|
|
"was not successful. please try refreshing the list in a while.<p></div>");
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function loadPolicyCompliance() {
|
|
|
|
|
var policyCompliance = $("#policy-view");
|
|
|
|
|
var policySrc = policyCompliance.attr("src");
|
|
|
|
|
var policyComplianceTemplate = policyCompliance.attr("src");
|
|
|
|
|
var deviceId = policyCompliance.data("device-id");
|
|
|
|
|
var deviceType = policyCompliance.data("device-type");
|
|
|
|
|
var activePolicy = null;
|
|
|
|
|
|
|
|
|
|
$.template("policy-view", policySrc, function (template) {
|
|
|
|
|
var serviceURLPolicy = "/devicemgt_admin/policies/" + deviceType + "/" + deviceId + "/active-policy"
|
|
|
|
|
var serviceURLCompliance = "/devicemgt_admin/policies/" + deviceType + "/" + deviceId;
|
|
|
|
|
|
|
|
|
|
var successCallbackCompliance = function (data) {
|
|
|
|
|
var viewModel = {};
|
|
|
|
|
viewModel.policy = activePolicy;
|
|
|
|
|
viewModel.deviceType = deviceType;
|
|
|
|
|
if (data != null && data.complianceFeatures != null && data.complianceFeatures != undefined && data.complianceFeatures.length > 0) {
|
|
|
|
|
viewModel.compliance = "NON-COMPLIANT";
|
|
|
|
|
viewModel.complianceFeatures = data.complianceFeatures;
|
|
|
|
|
var content = template(viewModel);
|
|
|
|
|
$("#policy-list-container").html(content);
|
|
|
|
|
} else {
|
|
|
|
|
viewModel.compliance = "COMPLIANT";
|
|
|
|
|
var content = template(viewModel);
|
|
|
|
|
$("#policy-list-container").html(content);
|
|
|
|
|
$("#policy-compliance-table").addClass("hidden");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var successCallbackPolicy = function (data) {
|
|
|
|
|
data = JSON.parse(data);
|
|
|
|
|
$('#policy-spinner').addClass('hidden');
|
|
|
|
|
if (data != null && data.active == true) {
|
|
|
|
|
activePolicy = data;
|
|
|
|
|
invokerUtil.get(serviceURLCompliance,
|
|
|
|
|
successCallbackCompliance, function (message) {
|
|
|
|
|
console.log(message);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
invokerUtil.get(serviceURLPolicy,
|
|
|
|
|
successCallbackPolicy, function (message) {
|
|
|
|
|
console.log(message);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
$.template(
|
|
|
|
|
"policy-view",
|
|
|
|
|
policyComplianceTemplate,
|
|
|
|
|
function (template) {
|
|
|
|
|
var getEffectivePolicyURL = "/api/device-mgt/v1.0/devices/" + deviceType + "/" + deviceId + "/effective-policy";
|
|
|
|
|
var getDeviceComplianceURL = "/api/device-mgt/v1.0/devices/" + deviceType + "/" + deviceId + "/compliance-data";
|
|
|
|
|
|
|
|
|
|
invokerUtil.get(
|
|
|
|
|
getEffectivePolicyURL,
|
|
|
|
|
// success-callback
|
|
|
|
|
function (data, textStatus, jqXHR) {
|
|
|
|
|
if (jqXHR.status == 200 && data) {
|
|
|
|
|
data = JSON.parse(data);
|
|
|
|
|
$("#policy-spinner").addClass("hidden");
|
|
|
|
|
if (data["active"] == true) {
|
|
|
|
|
activePolicy = data;
|
|
|
|
|
invokerUtil.get(
|
|
|
|
|
getDeviceComplianceURL,
|
|
|
|
|
// success-callback
|
|
|
|
|
function (data, textStatus, jqXHR) {
|
|
|
|
|
if (jqXHR.status == 200 && data) {
|
|
|
|
|
var viewModel = {};
|
|
|
|
|
viewModel["policy"] = activePolicy;
|
|
|
|
|
viewModel["deviceType"] = deviceType;
|
|
|
|
|
data = JSON.parse(data);
|
|
|
|
|
var content;
|
|
|
|
|
if (data["complianceData"]) {
|
|
|
|
|
if (data["complianceData"]["complianceFeatures"] &&
|
|
|
|
|
data["complianceData"]["complianceFeatures"].length > 0) {
|
|
|
|
|
viewModel["compliance"] = "NON-COMPLIANT";
|
|
|
|
|
viewModel["complianceFeatures"] = data["complianceData"]["complianceFeatures"];
|
|
|
|
|
content = template(viewModel);
|
|
|
|
|
$("#policy-list-container").html(content);
|
|
|
|
|
} else {
|
|
|
|
|
viewModel["compliance"] = "COMPLIANT";
|
|
|
|
|
content = template(viewModel);
|
|
|
|
|
$("#policy-list-container").html(content);
|
|
|
|
|
$("#policy-compliance-table").addClass("hidden");
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$("#policy-list-container").
|
|
|
|
|
html("<div class='panel-body'><br><p class='fw-warning'> This device " +
|
|
|
|
|
"has no policy applied.<p></div>");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// error-callback
|
|
|
|
|
function () {
|
|
|
|
|
$("#policy-list-container").
|
|
|
|
|
html("<div class='panel-body'><br><p class='fw-warning'> Loading policy compliance related data " +
|
|
|
|
|
"was not successful. please try refreshing data in a while.<p></div>");
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// error-callback
|
|
|
|
|
function () {
|
|
|
|
|
$("#policy-list-container").
|
|
|
|
|
html("<div class='panel-body'><br><p class='fw-warning'> Loading policy compliance related data " +
|
|
|
|
|
"was not successful. please try refreshing data in a while.<p></div>");
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}());
|
|
|
|
|