forked from community/device-mgt-plugins
Merge branch 'master' of https://github.com/wso2/carbon-device-mgt-plugins into carbon-kernel-4.4.7
commit
0d3cd0c9e1
@ -0,0 +1,108 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* you may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.iot.devicetype.config;
|
||||
|
||||
|
||||
import org.wso2.carbon.device.mgt.iot.devicetype.util.DeviceTypeConfigUtil;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* Class for holding CertificateKeystore data.
|
||||
*/
|
||||
@XmlRootElement(name = "CertificateKeystore")
|
||||
public class CertificateKeystoreConfig {
|
||||
|
||||
private String certificateKeystoreLocation;
|
||||
private String certificateKeystoreType;
|
||||
private String certificateKeystorePassword;
|
||||
private String caCertAlias;
|
||||
private String caPrivateKeyPassword;
|
||||
private String raCertAlias;
|
||||
private String raPrivateKeyPassword;
|
||||
|
||||
@XmlElement(name = "CertificateKeystoreLocation", required = true)
|
||||
public String getCertificateKeystoreLocation() {
|
||||
return certificateKeystoreLocation;
|
||||
}
|
||||
|
||||
public void setCertificateKeystoreLocation(String certificateKeystoreLocation) {
|
||||
if (certificateKeystoreLocation != null && certificateKeystoreLocation.toLowerCase().
|
||||
contains(DeviceTypeConfigUtil.CARBON_HOME_ENTRY)) {
|
||||
certificateKeystoreLocation = certificateKeystoreLocation.replace(DeviceTypeConfigUtil.CARBON_HOME_ENTRY,
|
||||
System.getProperty(DeviceTypeConfigUtil.CARBON_HOME));
|
||||
}
|
||||
this.certificateKeystoreLocation = certificateKeystoreLocation;
|
||||
}
|
||||
|
||||
@XmlElement(name = "CertificateKeystoreType", required = true)
|
||||
public String getCertificateKeystoreType() {
|
||||
return certificateKeystoreType;
|
||||
}
|
||||
|
||||
public void setCertificateKeystoreType(String certificateKeystoreType) {
|
||||
this.certificateKeystoreType = certificateKeystoreType;
|
||||
}
|
||||
|
||||
@XmlElement(name = "CertificateKeystorePassword", required = true)
|
||||
public String getCertificateKeystorePassword() {
|
||||
return certificateKeystorePassword;
|
||||
}
|
||||
|
||||
public void setCertificateKeystorePassword(String certificateKeystorePassword) {
|
||||
this.certificateKeystorePassword = certificateKeystorePassword;
|
||||
}
|
||||
|
||||
@XmlElement(name = "CACertAlias", required = true)
|
||||
public String getCACertAlias() {
|
||||
return caCertAlias;
|
||||
}
|
||||
|
||||
public void setCACertAlias(String caCertAlias) {
|
||||
this.caCertAlias = caCertAlias;
|
||||
}
|
||||
|
||||
@XmlElement(name = "CAPrivateKeyPassword", required = true)
|
||||
public String getCAPrivateKeyPassword() {
|
||||
return caPrivateKeyPassword;
|
||||
}
|
||||
|
||||
public void setCAPrivateKeyPassword(String caPrivateKeyPassword) {
|
||||
this.caPrivateKeyPassword = caPrivateKeyPassword;
|
||||
}
|
||||
|
||||
@XmlElement(name = "RACertAlias", required = true)
|
||||
public String getRACertAlias() {
|
||||
return raCertAlias;
|
||||
}
|
||||
|
||||
public void setRACertAlias(String raCertAlias) {
|
||||
this.raCertAlias = raCertAlias;
|
||||
}
|
||||
|
||||
@XmlElement(name = "RAPrivateKeyPassword", required = true)
|
||||
public String getRAPrivateKeyPassword() {
|
||||
return raPrivateKeyPassword;
|
||||
}
|
||||
|
||||
public void setRAPrivateKeyPassword(String raPrivateKeyPassword) {
|
||||
this.raPrivateKeyPassword = raPrivateKeyPassword;
|
||||
}
|
||||
}
|
2
components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/exception/ValidationInterceptor.java → components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/common/ValidationInterceptor.java
2
components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/exception/ValidationInterceptor.java → components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/common/ValidationInterceptor.java
@ -0,0 +1,92 @@
|
||||
{{!
|
||||
Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
|
||||
WSO2 Inc. licenses this file to you under the Apache License,
|
||||
Version 2.0 (the "License"); you may not use this file except
|
||||
in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
}}
|
||||
<!-- android -->
|
||||
<div class="panel panel-default">
|
||||
<div id="android-config-body" class="panel-collapse panel-body" role="tabpanel">
|
||||
<div id="android-config-error-msg" class="alert alert-danger hidden" role="alert">
|
||||
<i class="icon fw fw-error"></i><span></span>
|
||||
</div>
|
||||
<h4>
|
||||
Communication Protocol Configuration
|
||||
<hr>
|
||||
</h4>
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="android-config-notifier">
|
||||
Type of Communication
|
||||
<span class="helper" title="Communication method of android agent to contact EMM server">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<select id="android-config-notifier" class="form-control" data-default="0">
|
||||
<option value="1">Local Polling</option>
|
||||
<option value="2">Google Cloud Messaging ( GCM )</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div id="local-inputs">
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="android-config-notifier-frequency">
|
||||
Polling Interval*
|
||||
<span class="helper" title="Time interval after which Android agent will contact EMM server each time to fetch data">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
<br>
|
||||
( Should be in seconds )
|
||||
</label>
|
||||
<input id="android-config-notifier-frequency" type="text" class="form-control" >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="gcm-inputs">
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="android-config-gcm-api-key">
|
||||
API Key*
|
||||
<span class="helper" title="GCM API Key">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="android-config-gcm-api-key" type="text" class="form-control" >
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="android-config-gcm-sender-id">
|
||||
Sender ID*
|
||||
<span class="helper" title="GCM Sender ID">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="android-config-gcm-sender-id" type="text" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<h4>
|
||||
End User License Agreement ( EULA )
|
||||
<hr>
|
||||
</h4>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<textarea id="android-eula" type="text" class="form-control"></textarea>
|
||||
</div>
|
||||
<div class="wr-input-control wr-btn-grp">
|
||||
<button id="save-android-btn" class="wr-btn">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /android -->
|
||||
{{#zone "bottomJs"}}
|
||||
{{js "js/platform-configuration.js"}}
|
||||
{{/zone}}
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"version" : "1.0.0"
|
||||
}
|
@ -0,0 +1,249 @@
|
||||
/*
|
||||
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||
* either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Checks if provided input is valid against RegEx input.
|
||||
*
|
||||
* @param regExp Regular expression
|
||||
* @param inputString Input string to check
|
||||
* @returns {boolean} Returns true if input matches RegEx
|
||||
*/
|
||||
function isPositiveInteger(str) {
|
||||
return /^\+?(0|[1-9]\d*)$/.test(str);
|
||||
}
|
||||
|
||||
var notifierTypeConstants = {
|
||||
"LOCAL": "1",
|
||||
"GCM": "2"
|
||||
};
|
||||
// Constants to define platform types available
|
||||
var platformTypeConstants = {
|
||||
"ANDROID": "android",
|
||||
"IOS": "ios",
|
||||
"WINDOWS": "windows"
|
||||
};
|
||||
|
||||
var responseCodes = {
|
||||
"CREATED": "Created",
|
||||
"SUCCESS": "201",
|
||||
"INTERNAL_SERVER_ERROR": "Internal Server Error"
|
||||
};
|
||||
|
||||
var configParams = {
|
||||
"NOTIFIER_TYPE": "notifierType",
|
||||
"NOTIFIER_FREQUENCY": "notifierFrequency",
|
||||
"GCM_API_KEY": "gcmAPIKey",
|
||||
"GCM_SENDER_ID": "gcmSenderId",
|
||||
"ANDROID_EULA": "androidEula",
|
||||
"IOS_EULA": "iosEula",
|
||||
"CONFIG_COUNTRY": "configCountry",
|
||||
"CONFIG_STATE": "configState",
|
||||
"CONFIG_LOCALITY": "configLocality",
|
||||
"CONFIG_ORGANIZATION": "configOrganization",
|
||||
"CONFIG_ORGANIZATION_UNIT": "configOrganizationUnit",
|
||||
"MDM_CERT_PASSWORD": "MDMCertPassword",
|
||||
"MDM_CERT_TOPIC_ID": "MDMCertTopicID",
|
||||
"APNS_CERT_PASSWORD": "APNSCertPassword",
|
||||
"MDM_CERT": "MDMCert",
|
||||
"MDM_CERT_NAME": "MDMCertName",
|
||||
"APNS_CERT": "APNSCert",
|
||||
"APNS_CERT_NAME": "APNSCertName",
|
||||
"ORG_DISPLAY_NAME": "organizationDisplayName",
|
||||
"GENERAL_EMAIL_HOST": "emailHost",
|
||||
"GENERAL_EMAIL_PORT": "emailPort",
|
||||
"GENERAL_EMAIL_USERNAME": "emailUsername",
|
||||
"GENERAL_EMAIL_PASSWORD": "emailPassword",
|
||||
"GENERAL_EMAIL_SENDER_ADDRESS": "emailSender",
|
||||
"GENERAL_EMAIL_TEMPLATE": "emailTemplate",
|
||||
"COMMON_NAME": "commonName",
|
||||
"KEYSTORE_PASSWORD": "keystorePassword",
|
||||
"PRIVATE_KEY_PASSWORD": "privateKeyPassword",
|
||||
"BEFORE_EXPIRE": "beforeExpire",
|
||||
"AFTER_EXPIRE": "afterExpire",
|
||||
"WINDOWS_EULA": "windowsLicense",
|
||||
"IOS_CONFIG_MDM_MODE": "iOSConfigMDMMode",
|
||||
"IOS_CONFIG_APNS_MODE": "iOSConfigAPNSMode"
|
||||
};
|
||||
|
||||
$(document).ready(function () {
|
||||
$("#gcm-inputs").hide();
|
||||
tinymce.init({
|
||||
selector: "textarea",
|
||||
height:500,
|
||||
theme: "modern",
|
||||
plugins: [
|
||||
"autoresize",
|
||||
"advlist autolink lists link image charmap print preview anchor",
|
||||
"searchreplace visualblocks code fullscreen",
|
||||
"insertdatetime image table contextmenu paste"
|
||||
],
|
||||
toolbar: "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
|
||||
});
|
||||
|
||||
var androidConfigAPI = "/api/device-mgt/android/v1.0/configuration";
|
||||
|
||||
/**
|
||||
* Following requests would execute
|
||||
* on page load event of platform configuration page in WSO2 EMM Console.
|
||||
* Upon receiving the response, the parameters will be set to the fields,
|
||||
* in case those configurations are already set.
|
||||
*/
|
||||
|
||||
invokerUtil.get(
|
||||
androidConfigAPI,
|
||||
function (data) {
|
||||
data = JSON.parse(data);
|
||||
if (data != null && data.configuration != null) {
|
||||
for (var i = 0; i < data.configuration.length; i++) {
|
||||
var config = data.configuration[i];
|
||||
if (config.name == configParams["NOTIFIER_TYPE"]) {
|
||||
$("#android-config-notifier").val(config.value);
|
||||
if (config.value != notifierTypeConstants["GCM"]) {
|
||||
$("#gcm-inputs").hide();
|
||||
$("#local-inputs").show();
|
||||
} else {
|
||||
$("#gcm-inputs").show();
|
||||
$("#local-inputs").hide();
|
||||
}
|
||||
} else if (config.name == configParams["NOTIFIER_FREQUENCY"]) {
|
||||
$("input#android-config-notifier-frequency").val(config.value / 1000);
|
||||
} else if (config.name == configParams["GCM_API_KEY"]) {
|
||||
$("input#android-config-gcm-api-key").val(config.value);
|
||||
} else if (config.name == configParams["GCM_SENDER_ID"]) {
|
||||
$("input#android-config-gcm-sender-id").val(config.value);
|
||||
} else if (config.name == configParams["ANDROID_EULA"]) {
|
||||
$("#android-eula").val(config.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, function (data) {
|
||||
console.log(data);
|
||||
});
|
||||
|
||||
$("select.select2[multiple=multiple]").select2({
|
||||
tags: true
|
||||
});
|
||||
|
||||
$("#android-config-notifier").change(function () {
|
||||
var notifierType = $("#android-config-notifier").find("option:selected").attr("value");
|
||||
if (notifierType != notifierTypeConstants["GCM"]) {
|
||||
$("#gcm-inputs").hide();
|
||||
$("#local-inputs").show();
|
||||
} else {
|
||||
$("#local-inputs").hide();
|
||||
$("#gcm-inputs").show();
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Following click function would execute
|
||||
* when a user clicks on "Save" button
|
||||
* on Android platform configuration page in WSO2 EMM Console.
|
||||
*/
|
||||
$("button#save-android-btn").click(function () {
|
||||
var notifierType = $("#android-config-notifier").find("option:selected").attr("value");
|
||||
var notifierFrequency = $("input#android-config-notifier-frequency").val();
|
||||
var gcmAPIKey = $("input#android-config-gcm-api-key").val();
|
||||
var gcmSenderId = $("input#android-config-gcm-sender-id").val();
|
||||
var androidLicense = tinyMCE.activeEditor.getContent();
|
||||
var errorMsgWrapper = "#android-config-error-msg";
|
||||
var errorMsg = "#android-config-error-msg span";
|
||||
if (notifierType == notifierTypeConstants["LOCAL"] && !notifierFrequency) {
|
||||
$(errorMsg).text("Notifier frequency is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (notifierType == notifierTypeConstants["LOCAL"] && !isPositiveInteger(notifierFrequency)) {
|
||||
$(errorMsg).text("Provided notifier frequency is invalid. ");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (notifierType == notifierTypeConstants["GCM"] && !gcmAPIKey) {
|
||||
$(errorMsg).text("GCM API Key is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (notifierType == notifierTypeConstants["GCM"] && !gcmSenderId) {
|
||||
$(errorMsg).text("GCM Sender ID is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else {
|
||||
|
||||
var addConfigFormData = {};
|
||||
var configList = new Array();
|
||||
|
||||
var type = {
|
||||
"name": configParams["NOTIFIER_TYPE"],
|
||||
"value": notifierType,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var frequency = {
|
||||
"name": configParams["NOTIFIER_FREQUENCY"],
|
||||
"value": String(notifierFrequency * 1000),
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var gcmKey = {
|
||||
"name": configParams["GCM_API_KEY"],
|
||||
"value": gcmAPIKey,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var gcmId = {
|
||||
"name": configParams["GCM_SENDER_ID"],
|
||||
"value": gcmSenderId,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var androidEula = {
|
||||
"name": configParams["ANDROID_EULA"],
|
||||
"value": androidLicense,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
configList.push(type);
|
||||
configList.push(frequency);
|
||||
configList.push(androidEula);
|
||||
if (notifierType == notifierTypeConstants["GCM"]) {
|
||||
configList.push(gcmKey);
|
||||
configList.push(gcmId);
|
||||
}
|
||||
|
||||
addConfigFormData.type = platformTypeConstants["ANDROID"];
|
||||
addConfigFormData.configuration = configList;
|
||||
|
||||
var addConfigAPI = androidConfigAPI;
|
||||
|
||||
invokerUtil.put(
|
||||
addConfigAPI,
|
||||
addConfigFormData,
|
||||
function (data, textStatus, jqXHR) {
|
||||
data = JSON.parse(data);
|
||||
if (jqXHR.status == 201) {
|
||||
$("#config-save-form").addClass("hidden");
|
||||
$("#record-created-msg").removeClass("hidden");
|
||||
}
|
||||
|
||||
}, function (data) {
|
||||
if (data.status == 500) {
|
||||
$(errorMsg).text("Exception occurred at backend.");
|
||||
} else if (data.status == 403) {
|
||||
$(errorMsg).text("Action was not permitted.");
|
||||
} else {
|
||||
$(errorMsg).text("An unexpected error occurred.");
|
||||
}
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
}
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
@ -0,0 +1,44 @@
|
||||
{{!
|
||||
Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
|
||||
WSO2 Inc. licenses this file to you under the Apache License,
|
||||
Version 2.0 (the "License"); you may not use this file except
|
||||
in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
}}
|
||||
{{unit "cdmf.unit.ui.title" pageTitle="Device Details"}}
|
||||
{{unit "cdmf.unit.lib.service-invoker-utility"}}
|
||||
{{unit "cdmf.unit.lib.handlebars"}}
|
||||
|
||||
{{#zone "breadcrumbs"}}
|
||||
<li>
|
||||
<a href="{{@app.context}}/">
|
||||
<i class="icon fw fw-home"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{@app.context}}/devices">
|
||||
Devices
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Device Details
|
||||
</a>
|
||||
</li>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "content"}}
|
||||
{{unit "cdmf.unit.lib.data-table"}}
|
||||
{{unit "cdmf.unit.device.operation-mod"}}
|
||||
{{unit "cdmf.unit.device.view"}}
|
||||
{{/zone}}
|
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
function onRequest(context){
|
||||
var utility = require("/app/modules/utility.js").utility;
|
||||
context.handlebars.registerHelper('equal', function (lvalue, rvalue, options) {
|
||||
if (arguments.length < 3)
|
||||
throw new Error("Handlebars Helper equal needs 2 parameters");
|
||||
if( lvalue!=rvalue ) {
|
||||
return options.inverse(this);
|
||||
} else {
|
||||
return options.fn(this);
|
||||
}
|
||||
});
|
||||
|
||||
var deviceType = context.uriParams.deviceType;
|
||||
return {"deviceViewUnitName": utility.getTenantedDeviceUnitName(deviceType, "device-view")};
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"extends": "cdmf.page.device.view"
|
||||
}
|
@ -0,0 +1,166 @@
|
||||
{{!
|
||||
Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
|
||||
WSO2 Inc. licenses this file to you under the Apache License,
|
||||
Version 2.0 (the "License"); you may not use this file except
|
||||
in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
}}
|
||||
{{unit "cdmf.unit.ui.title" pageTitle="Device Management"}}
|
||||
|
||||
{{unit "cdmf.unit.data-tables-extended"}}
|
||||
{{unit "cdmf.unit.lib.qrcode"}}
|
||||
{{unit "mdm.unit.device.qr-modal"}}
|
||||
|
||||
{{#zone "breadcrumbs"}}
|
||||
<li>
|
||||
<a href="{{@app.context}}/">
|
||||
<i class="icon fw fw-home"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{@app.context}}/devices">
|
||||
Devices
|
||||
</a>
|
||||
</li>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "navbarActions"}}
|
||||
{{!-- #if permissions.enroll --}}
|
||||
<li>
|
||||
<a href="javascript:toggleEnrollment()">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-mobile fw-stack-1x"></i>
|
||||
<span class="fw-stack fw-move-right fw-move-bottom">
|
||||
<i class="fw fw-circle fw-stack-2x fw-stroke fw-inverse"></i>
|
||||
<i class="fw fw-circle fw-stack-2x"></i>
|
||||
<i class="fw fw-add fw-stack-1x"></i>
|
||||
</span>
|
||||
</span>
|
||||
Enroll Device
|
||||
</a>
|
||||
</li>
|
||||
{{!-- /if --}}
|
||||
<li>
|
||||
<a href="{{appContext}}devices/search">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-mobile fw-stack-1x"></i>
|
||||
<span class="fw-stack fw-move-right fw-move-bottom">
|
||||
<i class="fw fw-circle fw-stack-2x fw-stroke fw-inverse"></i>
|
||||
<i class="fw fw-circle fw-stack-2x"></i>
|
||||
<i class="fw fw-search fw-stack-1x"></i>
|
||||
</span>
|
||||
</span>
|
||||
Advanced Search
|
||||
</a>
|
||||
</li>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "content"}}
|
||||
<span id="permission" data-permission="{{permissions}}"></span>
|
||||
<div id="loading-content" class="col-centered">
|
||||
<i class="fw fw-settings fw-spin fw-2x"></i>
|
||||
|
||||
Loading devices . . .
|
||||
<br>
|
||||
</div>
|
||||
<div id="device-listing-status" class="raw hidden">
|
||||
<ul style="list-style-type: none;">
|
||||
<li class="message message-info">
|
||||
<h4>
|
||||
<i class="icon fw fw-info"></i>
|
||||
<a id="device-listing-status-msg"></a>
|
||||
</h4>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="device-table">
|
||||
<table class="table table-striped table-hover list-table display responsive nowrap data-table grid-view"
|
||||
id="device-grid">
|
||||
<thead>
|
||||
<tr class="sort-row">
|
||||
<th class="no-sort"></th>
|
||||
<th>By Device Name</th>
|
||||
<th>By Owner</th>
|
||||
<th>By Status</th>
|
||||
<th>By Platform</th>
|
||||
<th>By Ownership</th>
|
||||
<th class="no-sort"></th>
|
||||
</tr>
|
||||
<tr class="filter-row filter-box">
|
||||
<th class="no-sort"></th>
|
||||
<th data-for="By Device Name"></th>
|
||||
<th data-for="By Owner" class="text-filter"></th>
|
||||
<th data-for="By Status" class="select-filter"></th>
|
||||
<th data-for="By Platform" class="select-filter data-platform"></th>
|
||||
<th data-for="By Ownership" class="select-filter"></th>
|
||||
<th class="no-sort"></th>
|
||||
</tr>
|
||||
<tr class="bulk-action-row hidden">
|
||||
<th colspan="7">
|
||||
<div id="operation-bar">
|
||||
{{unit "mdm.unit.device.operation-bar"}}
|
||||
</div>
|
||||
<div id="operation-guide" class="bs-callout bs-callout-info">
|
||||
<h4>Enabling Device Operations</h4>
|
||||
<p>To enable device operations, select the desired platform from above filter.</p>
|
||||
</div>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="ast-container">
|
||||
|
||||
<br class="c-both"/>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<br class="c-both"/>
|
||||
<div id="content-filter-types" style="display: none">
|
||||
<div class="sort-title">Sort By</div>
|
||||
<div class="sort-options">
|
||||
<a href="#">By Device Name<span class="ico-sort-asc"></span></a>
|
||||
<a href="#">By Owner</a>
|
||||
<a href="#">By Status</a>
|
||||
<a href="#">By Platform</a>
|
||||
<a href="#">By Ownership</a>
|
||||
</div>
|
||||
</div>
|
||||
<div id="no-device-view" class="ast-container list-view hidden">
|
||||
<div class="ctrl-info-panel col-centered text-center wr-login">
|
||||
<h2>You don't have any device registered at the moment.</h2>
|
||||
<br/>
|
||||
<p class="text-center">
|
||||
<a href="javascript:toggleEnrollment()" class="wr-btn">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-mobile fw-stack-1x"></i>
|
||||
<span class="fw-stack fw-move-right fw-move-bottom">
|
||||
<i class="fw fw-circle fw-stack-2x fw-stroke fw-inverse"></i>
|
||||
<i class="fw fw-circle fw-stack-2x"></i>
|
||||
<i class="fw fw-add fw-stack-1x"></i>
|
||||
</span>
|
||||
</span>
|
||||
Enroll New Device
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "bottomJs"}}
|
||||
<script id="device-listing" data-current-user="{{currentUser.username}}"
|
||||
data-image-resource="{{self.publicURL}}/images/"
|
||||
src="{{self.publicURL}}/templates/device-listing.hbs" type="text/x-handlebars-template"></script>
|
||||
{{js "js/device-listing.js"}}
|
||||
{{/zone}}
|
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
function onRequest(context){
|
||||
var userModule = require("/app/modules/business-controllers/user.js").userModule;
|
||||
var constants = require("/app/modules/constants.js");
|
||||
var viewModel = {};
|
||||
var permissions = [];
|
||||
if(userModule.isAuthorized("/permission/admin/device-mgt/emm-admin/devices/list")){
|
||||
permissions.push("LIST_DEVICES");
|
||||
if (userModule.isAuthorized("/permission/admin/device-mgt/emm-admin/devices/view")) {
|
||||
permissions.push("VIEW_DEVICES");
|
||||
}
|
||||
}else if(userModule.isAuthorized("/permission/admin/device-mgt/user/devices/list")){
|
||||
permissions.push("LIST_OWN_DEVICES");
|
||||
if (userModule.isAuthorized("/permission/admin/device-mgt/user/devices/view")) {
|
||||
permissions.push("VIEW_OWN_DEVICES");
|
||||
}
|
||||
}else if(userModule.isAuthorized("/permission/admin/device-mgt/emm-admin/policies/list")){
|
||||
permissions.push("LIST_POLICIES");
|
||||
}
|
||||
var currentUser = session.get(constants.USER_SESSION_KEY);
|
||||
viewModel.permissions = stringify(permissions);
|
||||
viewModel.currentUser = currentUser;
|
||||
return viewModel;
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"extends": "cdmf.page.devices"
|
||||
}
|
After Width: | Height: | Size: 229 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 6.8 KiB |
@ -0,0 +1,520 @@
|
||||
/*
|
||||
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||
* either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Following function would execute
|
||||
* when a user clicks on the list item
|
||||
* initial mode and with out select mode.
|
||||
*/
|
||||
function InitiateViewOption(url) {
|
||||
if ($(".select-enable-btn").text() == "Select") {
|
||||
$(location).attr('href', url);
|
||||
}
|
||||
}
|
||||
|
||||
(function () {
|
||||
var cache = {};
|
||||
var permissionSet = {};
|
||||
var validateAndReturn = function (value) {
|
||||
return (value == undefined || value == null) ? "Unspecified" : value;
|
||||
};
|
||||
Handlebars.registerHelper("deviceMap", function (device) {
|
||||
device.owner = validateAndReturn(device.owner);
|
||||
device.ownership = validateAndReturn(device.ownership);
|
||||
var arr = device.properties;
|
||||
if (arr){
|
||||
device.properties = arr.reduce(function (total, current) {
|
||||
total[current.name] = validateAndReturn(current.value);
|
||||
return total;
|
||||
}, {});
|
||||
}
|
||||
});
|
||||
|
||||
//This method is used to setup permission for device listing
|
||||
$.setPermission = function (permission) {
|
||||
permissionSet[permission] = true;
|
||||
};
|
||||
|
||||
$.hasPermission = function (permission) {
|
||||
return permissionSet[permission];
|
||||
};
|
||||
})();
|
||||
|
||||
/*
|
||||
* Setting-up global variables.
|
||||
*/
|
||||
var deviceCheckbox = "#ast-container .ctrl-wr-asset .itm-select input[type='checkbox']";
|
||||
var assetContainer = "#ast-container";
|
||||
|
||||
/*
|
||||
* DOM ready functions.
|
||||
*/
|
||||
$(document).ready(function () {
|
||||
/* Adding selected class for selected devices */
|
||||
$(deviceCheckbox).each(function () {
|
||||
addDeviceSelectedClass(this);
|
||||
});
|
||||
|
||||
var i;
|
||||
var permissionList = $("#permission").data("permission");
|
||||
for (i = 0; i < permissionList.length; i++) {
|
||||
$.setPermission(permissionList[i]);
|
||||
}
|
||||
|
||||
/* for device list sorting drop down */
|
||||
$(".ctrl-filter-type-switcher").popover({
|
||||
html : true,
|
||||
content : function () {
|
||||
return $("#content-filter-types").html();
|
||||
}
|
||||
});
|
||||
|
||||
$(".ast-container").on("click", ".claim-btn", function(e){
|
||||
e.stopPropagation();
|
||||
var deviceId = $(this).data("deviceid");
|
||||
var deviceListing = $("#device-listing");
|
||||
var currentUser = deviceListing.data("current-user");
|
||||
var serviceURL = "/temp-controller-agent/enrollment/claim?username=" + currentUser;
|
||||
var deviceIdentifier = {id: deviceId, type: "TemperatureController"};
|
||||
invokerUtil.put(serviceURL, deviceIdentifier, function(message){
|
||||
console.log(message);
|
||||
}, function(message){
|
||||
console.log(message.content);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
/*
|
||||
* On Select All Device button click function.
|
||||
*
|
||||
* @param button: Select All Device button
|
||||
*/
|
||||
function selectAllDevices(button) {
|
||||
if(!$(button).data('select')){
|
||||
$(deviceCheckbox).each(function(index){
|
||||
$(this).prop('checked', true);
|
||||
addDeviceSelectedClass(this);
|
||||
});
|
||||
$(button).data('select', true);
|
||||
$(button).html('Deselect All Devices');
|
||||
}else{
|
||||
$(deviceCheckbox).each(function(index){
|
||||
$(this).prop('checked', false);
|
||||
addDeviceSelectedClass(this);
|
||||
});
|
||||
$(button).data('select', false);
|
||||
$(button).html('Select All Devices');
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* On listing layout toggle buttons click function.
|
||||
*
|
||||
* @param view: Selected view type
|
||||
* @param selection: Selection button
|
||||
*/
|
||||
function changeDeviceView(view, selection) {
|
||||
$(".view-toggle").each(function() {
|
||||
$(this).removeClass("selected");
|
||||
});
|
||||
$(selection).addClass("selected");
|
||||
if (view == "list") {
|
||||
$(assetContainer).addClass("list-view");
|
||||
} else {
|
||||
$(assetContainer).removeClass("list-view");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Add selected style class to the parent element function.
|
||||
*
|
||||
* @param checkbox: Selected checkbox
|
||||
*/
|
||||
function addDeviceSelectedClass(checkbox) {
|
||||
if ($(checkbox).is(":checked")) {
|
||||
$(checkbox).closest(".ctrl-wr-asset").addClass("selected device-select");
|
||||
} else {
|
||||
$(checkbox).closest(".ctrl-wr-asset").removeClass("selected device-select");
|
||||
}
|
||||
}
|
||||
|
||||
function toTitleCase(str) {
|
||||
return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
|
||||
}
|
||||
|
||||
function loadDevices(searchType, searchParam){
|
||||
var deviceListing = $("#device-listing");
|
||||
var currentUser = deviceListing.data("currentUser");
|
||||
|
||||
var serviceURL;
|
||||
if ($.hasPermission("LIST_DEVICES")) {
|
||||
//serviceURL = "/mdm-admin/devices";
|
||||
serviceURL = "/api/device-mgt/v1.0/devices";
|
||||
} else if ($.hasPermission("LIST_OWN_DEVICES")) {
|
||||
//Get authenticated users devices
|
||||
serviceURL = "/api/device-mgt/v1.0/devices?user="+currentUser;
|
||||
//serviceURL = "/mdm-admin/users/devices?username="+currentUser;
|
||||
} else {
|
||||
$("#loading-content").remove();
|
||||
$('#device-table').addClass('hidden');
|
||||
$('#device-listing-status-msg').text('Permission denied.');
|
||||
$("#device-listing-status").removeClass(' hidden');
|
||||
return;
|
||||
}
|
||||
|
||||
function getPropertyValue(deviceProperties, propertyName) {
|
||||
var property;
|
||||
for (var i =0; i < deviceProperties.length; i++) {
|
||||
property = deviceProperties[i];
|
||||
if (property.name == propertyName) {
|
||||
return property.value;
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
var fnCreatedRow = function( nRow, aData, iDataIndex ) {
|
||||
$(nRow).attr('data-type', 'selectable');
|
||||
$(nRow).attr('data-deviceid', aData.deviceIdentifier);
|
||||
$(nRow).attr('data-devicetype', aData.deviceType);
|
||||
}
|
||||
|
||||
|
||||
var columns = [
|
||||
{
|
||||
class : 'remove-padding icon-only content-fill viewEnabledIcon',
|
||||
data : 'icon',
|
||||
render: function (data, type, row, meta) {
|
||||
var deviceType = row.deviceType;
|
||||
var deviceIdentifier = row.deviceIdentifier;
|
||||
var url = "#";
|
||||
if (status != 'REMOVED') {
|
||||
url = "device/" + deviceType + "?id=" + deviceIdentifier;
|
||||
}
|
||||
return '<div onclick="javascript:InitiateViewOption(\'' + url + '\')" class="thumbnail icon"><i class="square-element text fw fw-mobile"></i></div>'
|
||||
}
|
||||
},{
|
||||
class: 'fade-edge',
|
||||
data: 'name',
|
||||
render: function ( name, type, row, meta ) {
|
||||
var model = row.model;
|
||||
var vendor = row.vendor;
|
||||
var html = '<h4>Device ' + name + '</h4>';
|
||||
if (model) {
|
||||
html += '<div>(' + vendor + '-' + model + ')</div>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
class: 'fade-edge remove-padding-top',
|
||||
data: 'owner',
|
||||
render: function ( owner, type, row, meta ) {
|
||||
return '<div><label class="label-bold">Owner : </label>' + owner + '</div>';
|
||||
}
|
||||
},{
|
||||
class: 'fade-edge remove-padding-top',
|
||||
data: 'status',
|
||||
render: function ( status, type, row, meta ) {
|
||||
var html;
|
||||
switch (status) {
|
||||
case 'ACTIVE' :
|
||||
html = '<span><i class="fw fw-ok icon-success"></i> Active</span>';
|
||||
break;
|
||||
case 'INACTIVE' :
|
||||
html = '<span><i class="fw fw-warning icon-warning"></i> Inactive</span>';
|
||||
break;
|
||||
case 'BLOCKED' :
|
||||
html = '<span><i class="fw fw-remove icon-danger"></i> Blocked</span>';
|
||||
break;
|
||||
case 'REMOVED' :
|
||||
html = '<span><i class="fw fw-delete icon-danger"></i> Removed</span>';
|
||||
break;
|
||||
}
|
||||
return '<div><label class="label-bold">Status : </label>'+html+'</div>';
|
||||
}
|
||||
},{
|
||||
className: 'fade-edge remove-padding-top',
|
||||
data: 'deviceType',
|
||||
render: function ( deviceType, type, row, meta ) {
|
||||
return '<div><label class="label-bold">Type : </label>' + deviceType + '</div>';
|
||||
}
|
||||
},{
|
||||
className: 'fade-edge remove-padding-top',
|
||||
data: 'ownership',
|
||||
render: function ( ownership, type, row, meta ) {
|
||||
return '<div><label class="label-bold">Ownership : </label>' + ownership + '</div>';
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
var dataFilter = function(data){
|
||||
data = JSON.parse(data);
|
||||
|
||||
var objects = [];
|
||||
|
||||
$(data.devices).each(function( index ) {
|
||||
objects.push(
|
||||
{
|
||||
model: getPropertyValue(data.devices[index].properties, 'DEVICE_MODEL'),
|
||||
vendor: getPropertyValue(data.devices[index].properties, 'VENDOR'),
|
||||
owner: data.devices[index].enrolmentInfo.owner,
|
||||
status: data.devices[index].enrolmentInfo.status,
|
||||
ownership: data.devices[index].enrolmentInfo.ownership,
|
||||
deviceType: data.devices[index].type,
|
||||
deviceIdentifier: data.devices[index].deviceIdentifier,
|
||||
name : data.devices[index].name
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
json = {
|
||||
"recordsTotal": data.count,
|
||||
"recordsFiltered": data.count,
|
||||
"data": objects
|
||||
};
|
||||
return JSON.stringify( json );
|
||||
};
|
||||
|
||||
|
||||
$('#device-grid').datatables_extended_serverside_paging(null, '/api/device-mgt/v1.0/devices', dataFilter, columns, fnCreatedRow,
|
||||
function( oSettings ) {
|
||||
$(".icon .text").res_text(0.2);
|
||||
$('#device-grid').removeClass('hidden');
|
||||
$("#loading-content").remove();
|
||||
}, {
|
||||
"placeholder": "Search By Device Name",
|
||||
"searchKey" : "name"
|
||||
});
|
||||
|
||||
// $('#device-grid').datatables_extended({
|
||||
// serverSide: true,
|
||||
// processing: false,
|
||||
// searching: true,
|
||||
// ordering: false,
|
||||
// filter: false,
|
||||
// pageLength : 16,
|
||||
// ajax: { url : '/emm/api/devices', data : {url : serviceURL},
|
||||
// dataSrc: function (json) {
|
||||
// $('#device-grid').removeClass('hidden');
|
||||
// $("#loading-content").remove();
|
||||
// var $list = $("#device-table :input[type='search']");
|
||||
// $list.each(function(){
|
||||
// $(this).addClass("hidden");
|
||||
// });
|
||||
// return json.devices;
|
||||
// }
|
||||
// },
|
||||
// columnDefs: [
|
||||
// { targets: 0, data: 'name', className: 'remove-padding icon-only content-fill viewEnabledIcon' , render: function ( data, type, row, meta ) {
|
||||
// var deviceType = row.type;
|
||||
// var deviceIdentifier = row.deviceIdentifier;
|
||||
// var url = "#";
|
||||
// if (status != 'REMOVED') {
|
||||
// url = "devices/view?type=" + deviceType + "&id=" + deviceIdentifier;
|
||||
// }
|
||||
// return '<div onclick="javascript:InitiateViewOption(\'' + url + '\')" class="thumbnail icon"><i class="square-element text fw fw-mobile"></i></div>';
|
||||
// }},
|
||||
// { targets: 1, data: 'name', className: 'fade-edge' , render: function ( name, type, row, meta ) {
|
||||
// var model = getPropertyValue(row.properties, 'DEVICE_MODEL');
|
||||
// var vendor = getPropertyValue(row.properties, 'VENDOR');
|
||||
// var html = '<h4>Device ' + name + '</h4>';
|
||||
// if (model) {
|
||||
// html += '<div>(' + vendor + '-' + model + ')</div>';
|
||||
// }
|
||||
// return html;
|
||||
// }},
|
||||
// { targets: 2, data: 'enrolmentInfo.owner', className: 'fade-edge remove-padding-top'},
|
||||
// { targets: 3, data: 'enrolmentInfo.status', className: 'fade-edge remove-padding-top' ,
|
||||
// render: function ( status, type, row, meta ) {
|
||||
// var html;
|
||||
// switch (status) {
|
||||
// case 'ACTIVE' :
|
||||
// html = '<span><i class="fw fw-ok icon-success"></i> Active</span>';
|
||||
// break;
|
||||
// case 'INACTIVE' :
|
||||
// html = '<span><i class="fw fw-warning icon-warning"></i> Inactive</span>';
|
||||
// break;
|
||||
// case 'BLOCKED' :
|
||||
// html = '<span><i class="fw fw-remove icon-danger"></i> Blocked</span>';
|
||||
// break;
|
||||
// case 'REMOVED' :
|
||||
// html = '<span><i class="fw fw-delete icon-danger"></i> Removed</span>';
|
||||
// break;
|
||||
// }
|
||||
// return html;
|
||||
// }},
|
||||
// { targets: 4, data: 'type' , className: 'fade-edge remove-padding-top' },
|
||||
// { targets: 5, data: 'enrolmentInfo.ownership' , className: 'fade-edge remove-padding-top' },
|
||||
// { targets: 6, data: 'enrolmentInfo.status' , className: 'text-right content-fill text-left-on-grid-view no-wrap' ,
|
||||
// render: function ( status, type, row, meta ) {
|
||||
// var deviceType = row.type;
|
||||
// var deviceIdentifier = row.deviceIdentifier;
|
||||
// var html = '<span></span>';
|
||||
// return html;
|
||||
// }}
|
||||
// ],
|
||||
// "createdRow": function( row, data, dataIndex ) {
|
||||
// $(row).attr('data-type', 'selectable');
|
||||
// $(row).attr('data-deviceid', data.deviceIdentifier);
|
||||
// $(row).attr('data-devicetype', data.type);
|
||||
// var model = getPropertyValue(data.properties, 'DEVICE_MODEL');
|
||||
// var vendor = getPropertyValue(data.properties, 'VENDOR');
|
||||
// var owner = data.enrolmentInfo.owner;
|
||||
// var status = data.enrolmentInfo.status;
|
||||
// var ownership = data.enrolmentInfo.ownership;
|
||||
// var deviceType = data.type;
|
||||
// $.each($('td', row), function (colIndex) {
|
||||
// switch(colIndex) {
|
||||
// case 1:
|
||||
// $(this).attr('data-search', model + ',' + vendor);
|
||||
// $(this).attr('data-display', model);
|
||||
// break;
|
||||
// case 2:
|
||||
// $(this).attr('data-grid-label', "Owner");
|
||||
// $(this).attr('data-search', owner);
|
||||
// $(this).attr('data-display', owner);
|
||||
// break;
|
||||
// case 3:
|
||||
// $(this).attr('data-grid-label', "Status");
|
||||
// $(this).attr('data-search', status);
|
||||
// $(this).attr('data-display', status);
|
||||
// break;
|
||||
// case 4:
|
||||
// $(this).attr('data-grid-label', "Type");
|
||||
// $(this).attr('data-search', deviceType);
|
||||
// $(this).attr('data-display', deviceType);
|
||||
// break;
|
||||
// case 5:
|
||||
// $(this).attr('data-grid-label', "Ownership");
|
||||
// $(this).attr('data-search', ownership);
|
||||
// $(this).attr('data-display', ownership);
|
||||
// break;
|
||||
// }
|
||||
// });
|
||||
// },
|
||||
// "fnDrawCallback": function( oSettings ) {
|
||||
// $(".icon .text").res_text(0.2);
|
||||
// }
|
||||
// });
|
||||
$(deviceCheckbox).click(function () {
|
||||
addDeviceSelectedClass(this);
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
* Setting-up global variables.
|
||||
*/
|
||||
var deviceCheckbox = "#ast-container .ctrl-wr-asset .itm-select input[type='checkbox']";
|
||||
var assetContainer = "#ast-container";
|
||||
|
||||
function openCollapsedNav(){
|
||||
$('.wr-hidden-nav-toggle-btn').addClass('active');
|
||||
$('#hiddenNav').slideToggle('slideDown', function(){
|
||||
if($(this).css('display') == 'none'){
|
||||
$('.wr-hidden-nav-toggle-btn').removeClass('active');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function initPage() {
|
||||
var currentUser = $("#device-listing").data("currentUser");
|
||||
var serviceURL;
|
||||
if ($.hasPermission("LIST_DEVICES")) {
|
||||
serviceURL ="/api/device-mgt/v1.0/devices"
|
||||
} else if ($.hasPermission("LIST_OWN_DEVICES")) {
|
||||
//Get authenticated users devices
|
||||
serviceURL = "/api/device-mgt/v1.0/devices?user=" + currentUser;
|
||||
}
|
||||
invokerUtil.get(
|
||||
serviceURL,
|
||||
function (data) {
|
||||
if (data) {
|
||||
data = JSON.parse(data);
|
||||
if (data.devices.length > 0) {
|
||||
loadDevices();
|
||||
} else {
|
||||
$("#loading-content").remove();
|
||||
$("#device-table").remove();
|
||||
$("#no-device-view").removeClass(' hidden');
|
||||
}
|
||||
}
|
||||
}, function (message) {
|
||||
initPage();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
* DOM ready functions.
|
||||
*/
|
||||
$(document).ready(function () {
|
||||
initPage();
|
||||
|
||||
/* Adding selected class for selected devices */
|
||||
$(deviceCheckbox).each(function () {
|
||||
addDeviceSelectedClass(this);
|
||||
});
|
||||
|
||||
var i;
|
||||
var permissionList = $("#permission").data("permission");
|
||||
for (i = 0; i < permissionList.length; i++) {
|
||||
$.setPermission(permissionList[i]);
|
||||
}
|
||||
|
||||
/* for device list sorting drop down */
|
||||
$(".ctrl-filter-type-switcher").popover({
|
||||
html : true,
|
||||
content : function () {
|
||||
return $("#content-filter-types").html();
|
||||
}
|
||||
});
|
||||
|
||||
$(".ast-container").on("click", ".claim-btn", function(e){
|
||||
e.stopPropagation();
|
||||
var deviceId = $(this).data("deviceid");
|
||||
var deviceListing = $("#device-listing");
|
||||
var currentUser = deviceListing.data("current-user");
|
||||
var serviceURL = "/temp-controller-agent/enrollment/claim?username=" + currentUser;
|
||||
var deviceIdentifier = {id: deviceId, type: "TemperatureController"};
|
||||
invokerUtil.put(serviceURL, deviceIdentifier, function(message){
|
||||
console.log(message);
|
||||
}, function(message){
|
||||
console.log(message.content);
|
||||
});
|
||||
});
|
||||
|
||||
/* for data tables*/
|
||||
$('[data-toggle="tooltip"]').tooltip();
|
||||
|
||||
$("[data-toggle=popover]").popover();
|
||||
|
||||
$(".ctrl-filter-type-switcher").popover({
|
||||
html : true,
|
||||
content: function() {
|
||||
return $('#content-filter-types').html();
|
||||
}
|
||||
});
|
||||
|
||||
$('#nav').affix({
|
||||
offset: {
|
||||
top: $('header').height()
|
||||
}
|
||||
});
|
||||
|
||||
});
|
@ -0,0 +1,42 @@
|
||||
{{#each devices}}
|
||||
{{deviceMap this}}
|
||||
<tr data-type="selectable" data-deviceid="{{deviceIdentifier}}" data-devicetype="{{type}}">
|
||||
<td class="remove-padding icon-only content-fill viewEnabledIcon"
|
||||
{{#unequal enrolmentInfo.status "REMOVED"}}
|
||||
data-url="device?type={{type}}&id={{deviceIdentifier}}"
|
||||
{{/unequal}}
|
||||
>
|
||||
<div class="thumbnail icon">
|
||||
<i class="square-element text fw fw-mobile"></i>
|
||||
</div>
|
||||
</td>
|
||||
<td class="fade-edge" data-search="{{properties.DEVICE_MODEL}},{{properties.VENDOR}}" data-display="{{properties.DEVICE_MODEL}}">
|
||||
<h4>Device {{name}}</h4>
|
||||
{{#if properties.DEVICE_MODEL}}
|
||||
<div>({{properties.VENDOR}} - {{properties.DEVICE_MODEL}})</div>
|
||||
{{/if}}
|
||||
</td>
|
||||
<td class="fade-edge remove-padding-top" data-search="{{enrolmentInfo.owner}}" data-display="{{enrolmentInfo.owner}}" data-grid-label="Owner">{{enrolmentInfo.owner}}</td>
|
||||
<td class="fade-edge remove-padding-top" data-search="{{enrolmentInfo.status}}" data-display="{{enrolmentInfo.status}}" data-grid-label="Status">
|
||||
{{#equal enrolmentInfo.status "ACTIVE"}}<span><i class="fw fw-ok icon-success"></i> Active</span>{{/equal}}
|
||||
{{#equal enrolmentInfo.status "INACTIVE"}}<span><i class="fw fw-warning icon-warning"></i> Inactive</span>{{/equal}}
|
||||
{{#equal enrolmentInfo.status "BLOCKED"}}<span><i class="fw fw-remove icon-danger"></i> Blocked</span>{{/equal}}
|
||||
{{#equal enrolmentInfo.status "REMOVED"}}<span><i class="fw fw-delete icon-danger"></i> Removed</span>{{/equal}}
|
||||
</td>
|
||||
<td class="fade-edge remove-padding-top" data-search="{{type}}" data-display="{{type}}" data-grid-label="Type">{{type}}</td>
|
||||
<td class="fade-edge remove-padding-top" data-search="{{enrolmentInfo.ownership}}" data-display="{{enrolmentInfo.ownership}}" data-grid-label="Ownership">{{enrolmentInfo.ownership}}</td>
|
||||
<td class="text-right content-fill text-left-on-grid-view no-wrap">
|
||||
<!--{{#equal type "TemperatureController"}}
|
||||
{{#equal status "INACTIVE"}}
|
||||
<a href="#" data-click-event="remove-form" class="btn padding-reduce-on-grid-view claim-btn" data-deviceid="{{deviceIdentifier}}">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-edit fw-stack-1x"></i>
|
||||
</span>
|
||||
<span class="hidden-xs hidden-on-grid-view">Claim</span>
|
||||
</a>
|
||||
{{/equal}}
|
||||
{{/equal}}-->
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
@ -0,0 +1,643 @@
|
||||
{{!
|
||||
Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
|
||||
WSO2 Inc. licenses this file to you under the Apache License,
|
||||
Version 2.0 (the "License"); you may not use this file except
|
||||
in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
}}
|
||||
{{unit "cdmf.unit.ui.title" pageTitle="Policy Management"}}
|
||||
{{unit "cdmf.unit.data-tables-extended"}}
|
||||
|
||||
{{#zone "topCss"}}
|
||||
<style>
|
||||
.thumbnail.icon:before {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "breadcrumbs"}}
|
||||
<li>
|
||||
<a href="{{@app.context}}/">
|
||||
<i class="icon fw fw-home"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{@app.context}}/policies">
|
||||
Policies
|
||||
</a>
|
||||
</li>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "navbarActions"}}
|
||||
{{#if permissions.ADD_ADMIN_POLICY}}
|
||||
<li>
|
||||
<a href="{{@app.context}}/policy/add" class="cu-btn">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-add fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
</span>
|
||||
Add Policy
|
||||
</a>
|
||||
</li>
|
||||
{{/if}}
|
||||
{{#if permissions.CHANGE_POLICY_PRIORITY}}
|
||||
{{#equal noPolicy false}}
|
||||
<li>
|
||||
<a href="{{@app.context}}/policy/priority" class="cu-btn">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-throttling-policy fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
</span>
|
||||
Policy Priority
|
||||
</a>
|
||||
</li>
|
||||
{{/equal}}
|
||||
{{/if}}
|
||||
<li>
|
||||
<a href="#" class="cu-btn" id="appbar-btn-apply-changes">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-check fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
</span>
|
||||
Apply Changes To Devices
|
||||
</a>
|
||||
</li>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "content"}}
|
||||
{{#equal isUpdated true}}
|
||||
<input type="hidden" id="is-updated" value="UPDATED">
|
||||
{{/equal}}
|
||||
{{#equal noPolicy true}}
|
||||
<div id="ast-container" class="ast-container list-view">
|
||||
<div class="ctrl-info-panel col-centered text-center wr-login">
|
||||
<h2>You don't have any policy at the moment.</h2>
|
||||
<br/>
|
||||
{{#if permissions.ADD_ADMIN_POLICY}}
|
||||
<p class="text-center">
|
||||
<a href="{{@app.context}}/policy/add" class="wr-btn">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-add fw-stack-1x"></i>
|
||||
</span>
|
||||
Add New Policy
|
||||
</a>
|
||||
</p>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
{{/equal}}
|
||||
{{#equal noPolicy false}}
|
||||
<div id="loading-content" class="col-centered">
|
||||
<i class="fw fw-settings fw-spin fw-2x"></i>
|
||||
Loading policies . . .
|
||||
<br>
|
||||
</div>
|
||||
<table class="table table-striped table-hover list-table display responsive nowrap data-table grid-view hidden"
|
||||
id="policy-grid">
|
||||
<thead>
|
||||
<tr class="sort-row">
|
||||
<th class="no-sort"></th>
|
||||
<th class="no-sort"></th>
|
||||
<th>By Platform</th>
|
||||
<th>By Ownership Type</th>
|
||||
<th>By Role</th>
|
||||
<th>By User</th>
|
||||
<th>By Compliance Type</th>
|
||||
<th>By Status</th>
|
||||
<th class="no-sort"></th>
|
||||
</tr>
|
||||
<tr class="filter-row filter-box">
|
||||
<th class="no-sort"></th>
|
||||
<th class="no-sort"></th>
|
||||
<th data-for="By Platform" class="select-filter"></th>
|
||||
<th data-for="By Ownership Type" class="select-filter"></th>
|
||||
<th data-for="By Role" class="text-filter"></th>
|
||||
<th data-for="By User" class="text-filter"></th>
|
||||
<th data-for="By Compliance Type" class="select-filter"></th>
|
||||
<th data-for="By Status" class="select-filter"></th>
|
||||
<th class="no-sort"></th>
|
||||
</tr>
|
||||
<tr class="bulk-action-row">
|
||||
<th colspan="9">
|
||||
<ul class="tiles">
|
||||
{{#if removePermitted}}
|
||||
<li class="square">
|
||||
<a href="#" data-click-event="remove-form" class="btn square-element policy-remove-link"
|
||||
data-toggle="modal" data-target="#modalDemo">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-delete fw-stack-1x"></i>
|
||||
</span>
|
||||
Remove
|
||||
</a>
|
||||
</li>
|
||||
{{/if}}
|
||||
<li class="square">
|
||||
<a href="#" data-click-event="remove-form" class="btn square-element policy-publish-link"
|
||||
data-toggle="modal" data-target="#modalDemo">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="glyphicon glyphicon-floppy-saved"></i>
|
||||
</span>
|
||||
Publish
|
||||
</a>
|
||||
</li>
|
||||
<li class="square">
|
||||
<a href="#" data-click-event="remove-form" class="btn square-element policy-unpublish-link"
|
||||
data-toggle="modal" data-target="#modalDemo">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="glyphicon glyphicon-floppy-remove"></i>
|
||||
</span>
|
||||
Unpublish
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{{#each policyListToView}}
|
||||
<tr data-type="selectable" data-id="{{id}}" data-status="{{status}}">
|
||||
<td class="remove-padding icon-only content-fill viewEnabledIcon"
|
||||
data-url="{{@app.context}}/policy/view?id={{id}}" data-id="{{id}}">
|
||||
<div class="thumbnail icon">
|
||||
<img src="{{icon}}"/>
|
||||
</div>
|
||||
</td>
|
||||
<td class="fade-edge"
|
||||
data-search="{{name}}"
|
||||
data-display="{{name}}">
|
||||
<h4>{{name}}</h4>
|
||||
<div>({{platform}})</div>
|
||||
{{#equal status "Active/Updated"}}
|
||||
<span><i class="fw fw-warning icon-success"></i> Active/Updated</span>
|
||||
{{/equal}}
|
||||
{{#equal status "Active"}}
|
||||
<span><i class="fw fw-ok icon-success"></i> Active</span>
|
||||
{{/equal}}
|
||||
{{#equal status "Inactive/Updated"}}
|
||||
<span><i class="fw fw-warning icon-warning"></i> Inactive/Updated</span>
|
||||
{{/equal}}
|
||||
{{#equal status "Inactive"}}
|
||||
<span><i class="fw fw-error icon-danger"></i> Inactive</span>
|
||||
{{/equal}}
|
||||
</td>
|
||||
<td class="fade-edge remove-padding-top"
|
||||
data-search="{{platform}}"
|
||||
data-display="{{platform}}">
|
||||
</td>
|
||||
<td class="fade-edge remove-padding-top"
|
||||
data-search="{{ownershipType}}"
|
||||
data-display="{{ownershipType}}"
|
||||
data-grid-label="Ownership">
|
||||
{{ownershipType}}
|
||||
</td>
|
||||
<td id="policy-roles" class="fade-edge remove-padding-top"
|
||||
data-search="{{roles}}"
|
||||
data-display="{{roles}}"
|
||||
data-grid-label="Role(s)">
|
||||
{{roles}}
|
||||
</td>
|
||||
<td id="policy-users" class="fade-edge remove-padding-top"
|
||||
data-search="{{users}}"
|
||||
data-display="{{users}}"
|
||||
data-grid-label="User(s)">
|
||||
{{users}}
|
||||
</td>
|
||||
<td class="fade-edge remove-padding-top"
|
||||
data-search="{{compliance}}"
|
||||
data-display="{{compliance}}"
|
||||
data-grid-label="Compliance">
|
||||
{{compliance}}
|
||||
</td>
|
||||
<td id="policy-status" class="fade-edge remove-padding-top"
|
||||
data-search="{{status}}"
|
||||
data-display="{{status}}">
|
||||
</td>
|
||||
<td class="text-right content-fill text-left-on-grid-view no-wrap">
|
||||
<a href="{{@app.context}}/policy/edit?id={{id}}"
|
||||
data-id="{{id}}"
|
||||
data-click-event="remove-form"
|
||||
class="btn padding-reduce-on-grid-view policy-update-link">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-edit fw-stack-1x"></i>
|
||||
</span>
|
||||
<span class="hidden-xs hidden-on-grid-view">Re-Configure</span>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
<br class="c-both"/>
|
||||
</tbody>
|
||||
</table>
|
||||
{{/equal}}
|
||||
<br class="c-both"/>
|
||||
|
||||
<div id="content-filter-types" style="display: none">
|
||||
<div class="sort-title">Sort By</div>
|
||||
<div class="sort-options">
|
||||
<a href="#">By Platform<span class="ico-sort-asc"></span></a>
|
||||
<a href="#">By Ownership Type</a>
|
||||
<a href="#">By Role</a>
|
||||
<a href="#">By User</a>
|
||||
<a href="#">By Compliance Type</a>
|
||||
<a href="#">By Status</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="remove-policy-modal-content" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>Do you really want to remove the selected policy(s)?</h3>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="#" id="remove-policy-yes-link" class="btn-operations">
|
||||
Remove
|
||||
</a>
|
||||
|
||||
<a href="#" id="remove-policy-cancel-link" class="btn-operations">
|
||||
Cancel
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="remove-policy-success-content" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>Done. Selected policy was successfully removed.</h3>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="#" id="remove-policy-success-link" class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="remove-policy-error-content" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>An unexpected error occurred. Please try again later.</h3>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="#" id="remove-policy-error-link" class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="remove-active-policy-error-content" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>
|
||||
You cannot remove policies that have been already applied to devices.
|
||||
Please deselect active policies from your selection and try again.
|
||||
</h3>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="#" id="remove-active-policy-error-link" class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="publish-policy-modal-content" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>Do you really want to publish the selected policy(s)?</h3>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="#" id="publish-policy-yes-link" class="btn-operations">Yes</a>
|
||||
<a href="#" id="publish-policy-cancel-link" class="btn-operations">No</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="publish-policy-success-content" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>Done. Selected policy was successfully published.</h3>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="#" id="publish-policy-success-link" class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="publish-policy-error-content" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>An unexpected error occurred. Please try again later.</h3>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="#" id="publish-policy-error-link" class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="unpublish-policy-modal-content" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>Do you really want to unpublish the selected policy(s)?</h3>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="#" id="unpublish-policy-yes-link" class="btn-operations">
|
||||
Yes
|
||||
</a>
|
||||
|
||||
<a href="#" id="unpublish-policy-cancel-link" class="btn-operations">
|
||||
No
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="unpublish-policy-success-content" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>Done. Selected policy was successfully unpublished.</h3>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="#" id="unpublish-policy-success-link" class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="unpublish-policy-error-content" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>An unexpected error occurred. Please try again later.</h3>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="#" id="unpublish-policy-error-link" class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="save-policy-priorities-success-content" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>Done. New Policy priorities were successfully updated.</h3>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="#" id="save-policy-priorities-success-link" class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="save-policy-priorities-error-content" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>An unexpected error occurred. Please try again later.</h3>
|
||||
<h4 class="message-from-server"></h4>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="#" id="save-policy-priorities-error-link" class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="change-policy-modal-content" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>Do you really want to apply changes to all policies?</h3>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="#" id="change-policy-yes-link" class="btn-operations">
|
||||
Yes
|
||||
</a>
|
||||
|
||||
<a href="#" id="change-policy-cancel-link" class="btn-operations">
|
||||
No
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="change-policy-success-content" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>Done. Changes applied successfully.</h3>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="#" id="change-policy-success-link" class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="change-policy-error-content" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>An unexpected error occurred. Please try again later.</h3>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="#" id="change-policy-error-link" class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="errorPolicyUnPublish" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-error fw-stack-1x"></i>
|
||||
</span>
|
||||
Action cannot be performed !
|
||||
</h3>
|
||||
<h4>
|
||||
Please select a policy or a list of policies to un-publish.
|
||||
</h4>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="javascript:hidePopup()" class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="errorPolicyUnPublishSelection" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-error fw-stack-1x"></i>
|
||||
</span>
|
||||
Action cannot be performed !
|
||||
</h3>
|
||||
<h4>
|
||||
You cannot select already inactive policies to be unpublished.
|
||||
Please deselect inactive policies and try again.
|
||||
</h4>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="javascript:hidePopup()" class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="active-policy-selection-error" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-error fw-stack-1x"></i>
|
||||
</span>
|
||||
Action cannot be performed !
|
||||
</h3>
|
||||
<h4>
|
||||
You cannot select already active policies. Please deselect active policies and try again.
|
||||
</h4>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="javascript:hidePopup()" class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="policy-publish-error" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-error fw-stack-1x"></i>
|
||||
</span>
|
||||
Action cannot be performed !
|
||||
</h3>
|
||||
<h4>
|
||||
Please select a policy or a list of policies to publish.
|
||||
</h4>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="javascript:hidePopup()" class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="policy-remove-error" class="hide">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-error fw-stack-1x"></i>
|
||||
</span>
|
||||
Action cannot be performed !
|
||||
</h3>
|
||||
<h4>
|
||||
Please select a policy or a list of policies to remove.
|
||||
</h4>
|
||||
|
||||
<div class="buttons">
|
||||
<a href="javascript:hidePopup()" class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "bottomJs"}}
|
||||
{{js "js/policy-list.js"}}
|
||||
{{/zone}}
|
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||
* either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
function onRequest(context) {
|
||||
context.handlebars.registerHelper('equal', function (lvalue, rvalue, options) {
|
||||
if (arguments.length < 3) {
|
||||
throw new Error("Handlebars Helper equal needs 2 parameters");
|
||||
}
|
||||
if (lvalue != rvalue) {
|
||||
return options.inverse(this);
|
||||
} else {
|
||||
return options.fn(this);
|
||||
}
|
||||
});
|
||||
var page = {};
|
||||
var policyModule = require("/app/modules/business-controllers/policy.js")["policyModule"];
|
||||
var userModule = require("/app/modules/business-controllers/user.js")["userModule"];
|
||||
var response = policyModule.getAllPolicies();
|
||||
if (response["status"] == "success") {
|
||||
var policyListToView = response["content"];
|
||||
page["policyListToView"] = policyListToView;
|
||||
var policyCount = policyListToView.length;
|
||||
if (policyCount == 0) {
|
||||
page["policyListingStatusMsg"] = "No policy is available to be displayed.";
|
||||
page["noPolicy"] = true;
|
||||
} else {
|
||||
page["noPolicy"] = false;
|
||||
page["isUpdated"] = response["updated"];
|
||||
}
|
||||
} else {
|
||||
// here, response["status"] == "error"
|
||||
page["policyListingStatusMsg"] = "An unexpected error occurred. Please try again later.";
|
||||
page["noPolicy"] = true;
|
||||
}
|
||||
|
||||
if (userModule.isAuthorized("/permission/admin/device-mgt/policies/remove")) {
|
||||
page["removePermitted"] = true;
|
||||
}
|
||||
if (userModule.isAuthorized("/permission/admin/device-mgt/policies/update")) {
|
||||
page["editPermitted"] = true;
|
||||
}
|
||||
page.permissions = userModule.getUIPermissions();
|
||||
return page;
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue