Adding policy create UI

merge-requests/7/head
dilanua 8 years ago
parent 87cdfa209e
commit 13126fe398

@ -92,13 +92,10 @@ var invokers = function () {
xmlHttpRequest.send();
}
log.debug("Service Invoker-URL: " + endpoint);
log.debug("Service Invoker-Method: " + httpMethod);
// log.info("Request : " + httpMethod + " " + endpoint);
// log.info("Request payload if any : " + stringify(requestPayload));
// log.info("Response status : " + xmlHttpRequest.status);
// log.info("Response payload if any : " + xmlHttpRequest.responseText);
log.debug("Request : " + httpMethod + " " + endpoint);
log.debug("Request payload if any : " + stringify(requestPayload));
log.debug("Response status : " + xmlHttpRequest.status);
log.debug("Response payload if any : " + xmlHttpRequest.responseText);
if (xmlHttpRequest.status == 401 && (xmlHttpRequest.responseText == TOKEN_EXPIRED ||
xmlHttpRequest.responseText == TOKEN_INVALID ) && count < 5) {

@ -38,5 +38,6 @@
{{/zone}}
{{#zone "content"}}
{{unit "cdmf.unit.device.operation-mod"}}
{{unit "cdmf.unit.policy.create"}}
{{/zone}}

@ -1,17 +1,17 @@
/*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
* 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
* 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
* "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.
*/
@ -37,12 +37,50 @@ var operationModule = function () {
// Constants to define Android Operation Constants
var androidOperationConstants = {
"PASSCODE_POLICY_OPERATION_CODE": "PASSCODE_POLICY",
"VPN_OPERATION_CODE": "VPN",
"CAMERA_OPERATION_CODE": "CAMERA",
"ENCRYPT_STORAGE_OPERATION_CODE": "ENCRYPT_STORAGE",
"WIFI_OPERATION_CODE": "WIFI",
"WIPE_OPERATION_CODE": "WIPE_DATA",
"NOTIFICATION_OPERATION_CODE": "NOTIFICATION",
"CHANGE_LOCK_CODE_OPERATION_CODE": "CHANGE_LOCK_CODE"
"WORK_PROFILE_CODE": "WORK_PROFILE",
"CHANGE_LOCK_CODE_OPERATION_CODE": "CHANGE_LOCK_CODE",
"LOCK_OPERATION_CODE": "DEVICE_LOCK",
"UPGRADE_FIRMWARE": "UPGRADE_FIRMWARE",
"DISALLOW_ADJUST_VOLUME": "DISALLOW_ADJUST_VOLUME",
"DISALLOW_CONFIG_BLUETOOTH" : "DISALLOW_CONFIG_BLUETOOTH",
"DISALLOW_CONFIG_CELL_BROADCASTS" : "DISALLOW_CONFIG_CELL_BROADCASTS",
"DISALLOW_CONFIG_CREDENTIALS" : "DISALLOW_CONFIG_CREDENTIALS",
"DISALLOW_CONFIG_MOBILE_NETWORKS" : "DISALLOW_CONFIG_MOBILE_NETWORKS",
"DISALLOW_CONFIG_TETHERING" : "DISALLOW_CONFIG_TETHERING",
"DISALLOW_CONFIG_VPN" : "DISALLOW_CONFIG_VPN",
"DISALLOW_CONFIG_WIFI" : "DISALLOW_CONFIG_WIFI",
"DISALLOW_APPS_CONTROL" : "DISALLOW_APPS_CONTROL",
"DISALLOW_CREATE_WINDOWS" : "DISALLOW_CREATE_WINDOWS",
"DISALLOW_CROSS_PROFILE_COPY_PASTE" : "DISALLOW_CROSS_PROFILE_COPY_PASTE",
"DISALLOW_DEBUGGING_FEATURES" : "DISALLOW_DEBUGGING_FEATURES",
"DISALLOW_FACTORY_RESET" : "DISALLOW_FACTORY_RESET",
"DISALLOW_ADD_USER" : "DISALLOW_ADD_USER",
"DISALLOW_INSTALL_APPS" : "DISALLOW_INSTALL_APPS",
"DISALLOW_INSTALL_UNKNOWN_SOURCES" : "DISALLOW_INSTALL_UNKNOWN_SOURCES",
"DISALLOW_MODIFY_ACCOUNTS" : "DISALLOW_MODIFY_ACCOUNTS",
"DISALLOW_MOUNT_PHYSICAL_MEDIA" : "DISALLOW_MOUNT_PHYSICAL_MEDIA",
"DISALLOW_NETWORK_RESET" : "DISALLOW_NETWORK_RESET",
"DISALLOW_OUTGOING_BEAM" : "DISALLOW_OUTGOING_BEAM",
"DISALLOW_OUTGOING_CALLS" : "DISALLOW_OUTGOING_CALLS",
"DISALLOW_REMOVE_USER" : "DISALLOW_REMOVE_USER",
"DISALLOW_SAFE_BOOT" : "DISALLOW_SAFE_BOOT",
"DISALLOW_SHARE_LOCATION" : "DISALLOW_SHARE_LOCATION",
"DISALLOW_SMS" : "DISALLOW_SMS",
"DISALLOW_UNINSTALL_APPS" : "DISALLOW_UNINSTALL_APPS",
"DISALLOW_UNMUTE_MICROPHONE" : "DISALLOW_UNMUTE_MICROPHONE",
"DISALLOW_USB_FILE_TRANSFER" : "DISALLOW_USB_FILE_TRANSFER",
"ALLOW_PARENT_PROFILE_APP_LINKING" : "ALLOW_PARENT_PROFILE_APP_LINKING",
"ENSURE_VERIFY_APPS" : "ENSURE_VERIFY_APPS",
"AUTO_TIME" : "AUTO_TIME",
"SET_SCREEN_CAPTURE_DISABLED" : "SET_SCREEN_CAPTURE_DISABLED",
"SET_STATUS_BAR_DISABLED" : "SET_STATUS_BAR_DISABLED",
"APPLICATION_OPERATION_CODE":"APP-RESTRICTION"
};
// Constants to define Windows Operation Constants
@ -58,6 +96,7 @@ var operationModule = function () {
var iosOperationConstants = {
"PASSCODE_POLICY_OPERATION_CODE": "PASSCODE_POLICY",
"RESTRICTIONS_OPERATION_CODE": "RESTRICTION",
"VPN_OPERATION_CODE": "VPN",
"WIFI_OPERATION_CODE": "WIFI",
"EMAIL_OPERATION_CODE": "EMAIL",
"AIRPLAY_OPERATION_CODE": "AIR_PLAY",
@ -66,12 +105,18 @@ var operationModule = function () {
"NOTIFICATION_OPERATION_CODE": "NOTIFICATION",
"CALENDAR_SUBSCRIPTION_OPERATION_CODE": "CALENDAR_SUBSCRIPTION",
"APN_OPERATION_CODE": "APN",
"CELLULAR_OPERATION_CODE": "CELLULAR"
"DOMAIN_CODE": "DOMAIN",
"CELLULAR_OPERATION_CODE": "CELLULAR",
"PER_APP_VPN_OPERATION_CODE": "PER_APP_VPN",
"APP_TO_PER_APP_VPN_MAPPING_OPERATION_CODE": "APP_TO_PER_APP_VPN_MAPPING"
};
publicMethods.getIOSServiceEndpoint = function (operationCode) {
var featureMap = {
"DEVICE_LOCK": "lock",
"VPN": "vpn",
"PER_APP_VPN": "perappvpn",
"APP_TO_PER_APP_VPN_MAPPING": "apptoperappvpnmapping",
"RING": "ring",
"LOCATION": "location",
"NOTIFICATION": "notification",
@ -182,6 +227,76 @@ var operationModule = function () {
"restrictionsAutonomousSingleAppModePermittedAppIDs": operationPayload["autonomousSingleAppModePermittedAppIDs"]
};
break;
case iosOperationConstants["VPN_OPERATION_CODE"]:
var pptp = false;
var l2tp = false;
if (operationPayload["vpnType"] == "PPTP") {
pptp = true;
} else if (operationPayload["vpnType"] == "L2TP") {
l2tp = true;
}
payload = {
"userDefinedName": operationPayload["userDefinedName"],
"overridePrimary": operationPayload["overridePrimary"],
"onDemandEnabled": operationPayload["onDemandEnabled"],
"onDemandMatchDomainsAlways": operationPayload["onDemandMatchDomainsAlways"],
"onDemandMatchDomainsNever": operationPayload["onDemandMatchDomainsNever"],
"onDemandMatchDomainsOnRetry": operationPayload["onDemandMatchDomainsOnRetry"],
"onDemandRules": operationPayload["onDemandRules"],
"vendorConfigs": operationPayload["vendorConfigs"],
"vpnType": operationPayload["vpnType"],
"pptpAuthName": pptp ? operationPayload.ppp["authName"] : "",
"pptpTokenCard": pptp ? operationPayload.ppp["tokenCard"] : "",
"pptpAuthPassword": pptp ? operationPayload.ppp["authPassword"] : "",
"pptpCommRemoteAddress": pptp ? operationPayload.ppp["commRemoteAddress"] : "",
"pptpRSASecureID": pptp ? operationPayload.ppp["RSASecureID"] : "",
"pptpCCPEnabled": pptp ? operationPayload.ppp["CCPEnabled"] : "",
"pptpCCPMPPE40Enabled": pptp ? operationPayload.ppp["CCPMPPE40Enabled"] : "",
"pptpCCPMPPE128Enabled": pptp ? operationPayload.ppp["CCPMPPE128Enabled"] : "",
"l2tpAuthName": l2tp ? operationPayload.ppp["authName"] : "",
"l2tpTokenCard": l2tp ? operationPayload.ppp["tokenCard"] : "",
"l2tpAuthPassword": l2tp ? operationPayload.ppp["authPassword"] : "",
"l2tpCommRemoteAddress": l2tp ? operationPayload.ppp["commRemoteAddress"] : "",
"l2tpRSASecureID": l2tp ? operationPayload.ppp["RSASecureID"] : "",
"ipsecRemoteAddress": operationPayload.ipSec["remoteAddress"],
"ipsecAuthenticationMethod": operationPayload.ipSec["authenticationMethod"],
"ipsecLocalIdentifier": operationPayload.ipSec["localIdentifier"],
"ipsecSharedSecret": operationPayload.ipSec["sharedSecret"],
"ipsecPayloadCertificateUUID": operationPayload.ipSec["payloadCertificateUUID"],
"ipsecXAuthEnabled": operationPayload.ipSec["XAuthEnabled"],
"ipsecXAuthName": operationPayload.ipSec["XAuthName"],
"ipsecPromptForVPNPIN": operationPayload.ipSec["promptForVPNPIN"],
"ikev2RemoteAddress": operationPayload.ikEv2["remoteAddress"],
"ikev2LocalIdentifier": operationPayload.ikEv2["localIdentifier"],
"ikev2RemoteIdentifier": operationPayload.ikEv2["remoteIdentifier"],
"ikev2AuthenticationMethod": operationPayload.ikEv2["authenticationMethod"],
"ikev2SharedSecret": operationPayload.ikEv2["sharedSecret"],
"ikev2PayloadCertificateUUID": operationPayload.ikEv2["payloadCertificateUUID"],
"ikev2ExtendedAuthEnabled": operationPayload.ikEv2["extendedAuthEnabled"],
"ikev2AuthName": operationPayload.ikEv2["authName"],
"ikev2AuthPassword": operationPayload.ikEv2["authPassword"],
"ikev2DeadPeerDetectionInterval": operationPayload.ikEv2["deadPeerDetectionInterval"],
"ikev2ServerCertificateIssuerCommonName": operationPayload.ikEv2["serverCertificateIssuerCommonName"],
"ikev2ServerCertificateCommonName": operationPayload.ikEv2["serverCertificateCommonName"]
};
break;
case iosOperationConstants["PER_APP_VPN_OPERATION_CODE"]:
payload = {
"operation": {
"VPNUUID": operationPayload["PER-APP-VPNUUID"],
"safariDomains": operationPayload["safariDomains"],
"onDemandMatchAppEnabled": operationPayload["onDemandMatchAppEnabled"]
}
};
break;
case iosOperationConstants["APP_TO_PER_APP_VPN_MAPPING_OPERATION_CODE"]:
payload = {
"operation": {
"appLayerVPNMappings": operationPayload["appLayerVPNMappings"]
}
};
break;
case iosOperationConstants["WIFI_OPERATION_CODE"]:
payload = {
"wifiHiddenNetwork": operationPayload["hiddenNetwork"],
@ -367,6 +482,112 @@ var operationModule = function () {
}
};
break;
case iosOperationConstants["VPN_OPERATION_CODE"]:
operationType = operationTypeConstants["PROFILE"];
var ppp = {};
var ipSec = {};
var ikev2 = {};
if (operationData["vpnType"] == "PPTP") {
ppp = {
"authName": operationData["pptpAuthName"],
"tokenCard": operationData["pptpTokenCard"],
"authPassword": operationData["pptpAuthPassword"],
"commRemoteAddress": operationData["pptpCommRemoteAddress"],
"RSASecureID": operationData["pptpRSASecureID"],
"CCPEnabled": operationData["pptpCCPEnabled"],
"CCPMPPE40Enabled": operationData["pptpCCPMPPE40Enabled"],
"CCPMPPE128Enabled": operationData["pptpCCPMPPE128Enabled"]
};
} else if (operationData["vpnType"] == "L2TP") {
ppp = {
"authName": operationData["l2tpAuthName"],
"tokenCard": operationData["l2tpTokenCard"],
"authPassword": operationData["l2tpAuthPassword"],
"commRemoteAddress": operationData["l2tpCommRemoteAddress"],
"RSASecureID": operationData["l2tpRSASecureID"]
};
} else if (operationData["vpnType"] == "IPSec") {
ipSec = {
"remoteAddress" : operationData["ipsecRemoteAddress"],
"authenticationMethod" : operationData["ipsecAuthenticationMethod"],
"localIdentifier" : operationData["ipsecLocalIdentifier"],
"sharedSecret" : operationData["ipsecSharedSecret"],
"payloadCertificateUUID" : operationData["ipsecPayloadCertificateUUID"],
"XAuthEnabled" : operationData["ipsecXAuthEnabled"],
"XAuthName" : operationData["ipsecXAuthName"],
"promptForVPNPIN" : operationData["ipsecPromptForVPNPIN"]
};
} else if (operationData["vpnType"] == "IKEv2") {
ikev2 = {
"remoteAddress" : operationData["ikev2RemoteAddress"],
"localIdentifier" : operationData["ikev2LocalIdentifier"],
"remoteIdentifier" : operationData["ikev2RemoteIdentifier"],
"authenticationMethod" : operationData["ikev2AuthenticationMethod"],
"sharedSecret" : operationData["ikev2SharedSecret"],
"payloadCertificateUUID" : operationData["ikev2PayloadCertificateUUID"],
"extendedAuthEnabled" : operationData["ikev2ExtendedAuthEnabled"],
"authName" : operationData["ikev2AuthName"],
"authPassword" : operationData["ikev2AuthPassword"],
"deadPeerDetectionInterval" : operationData["ikev2DeadPeerDetectionInterval"],
"serverCertificateIssuerCommonName" : operationData["ikev2ServerCertificateIssuerCommonName"],
"serverCertificateCommonName" : operationData["ikev2ServerCertificateCommonName"]
};
}
var domainsAlways = new Array();
for (var i = 0; i < operationData["onDemandMatchDomainsAlways"].length; i++) {
domainsAlways.push(operationData["onDemandMatchDomainsAlways"][i].domain);
}
var domainsNever = new Array();
for (var i = 0; i < operationData["onDemandMatchDomainsNever"].length; i++) {
domainsNever.push(operationData["onDemandMatchDomainsNever"][i].domain);
}
var domainsRetry = new Array();
for (var i = 0; i < operationData["onDemandMatchDomainsOnRetry"].length; i++) {
domainsRetry.push(operationData["onDemandMatchDomainsOnRetry"][i].domain);
}
payload = {
"operation": {
"userDefinedName": operationData["userDefinedName"],
"overridePrimary": operationData["overridePrimary"],
"onDemandEnabled": operationData["onDemandEnabled"],
"onDemandMatchDomainsAlways": domainsAlways,
"onDemandMatchDomainsNever": domainsNever,
"onDemandMatchDomainsOnRetry": domainsRetry,
"onDemandRules" : operationData["onDemandRules"],
"vendorConfigs" : operationData["vendorConfigs"],
"vpnType" : operationData["vpnType"],
"ppp": ppp,
"ipSec": ipSec,
"ikEv2": ikev2
}
};
break;
case iosOperationConstants["PER_APP_VPN_OPERATION_CODE"]:
operationType = operationTypeConstants["PROFILE"];
var domains = new Array();
for (var i = 0; i < operationData["safariDomains"].length; i++) {
domains.push(operationData["safariDomains"][i].domain);
}
payload = {
"operation": {
"VPNUUID": operationData["VPNUUID"],
"safariDomains": domains,
"onDemandMatchAppEnabled": operationData["onDemandMatchAppEnabled"]
}
};
break;
case iosOperationConstants["APP_TO_PER_APP_VPN_MAPPING_OPERATION_CODE"]:
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"appLayerVPNMappings": operationData["appLayerVPNMappings"]
}
};
break;
case iosOperationConstants["RESTRICTIONS_OPERATION_CODE"]:
operationType = operationTypeConstants["PROFILE"];
payload = {
@ -528,6 +749,15 @@ var operationModule = function () {
}
};
break;
case iosOperationConstants["DOMAIN_CODE"]:
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"emailDomains": operationData["emailDomains"],
"webDomains": operationData["webDomains"]
}
};
break;
case iosOperationConstants["CELLULAR_OPERATION_CODE"]:
operationType = operationTypeConstants["PROFILE"];
payload = {
@ -584,9 +814,7 @@ var operationModule = function () {
};
break;
case androidOperationConstants["CAMERA_OPERATION_CODE"]:
payload = {
"cameraEnabled": operationPayload["enabled"]
};
payload = operationPayload;
break;
case androidOperationConstants["ENCRYPT_STORAGE_OPERATION_CODE"]:
payload = {
@ -596,7 +824,29 @@ var operationModule = function () {
case androidOperationConstants["WIFI_OPERATION_CODE"]:
payload = {
"wifiSSID": operationPayload["ssid"],
"wifiPassword": operationPayload["password"]
"wifiPassword": operationPayload["password"],
"wifiType": operationPayload["type"],
"wifiEAP": operationPayload["eap"],
"wifiPhase2": operationPayload["phase2"],
"wifiProvisioning": operationPayload["provisioning"],
"wifiIdentity": operationPayload["identity"],
"wifiAnoIdentity": operationPayload["anonymousIdentity"],
"wifiCaCert" : operationPayload["cacert"],
"wifiCaCertName" : operationPayload["cacertName"]
};
break;
case androidOperationConstants["VPN_OPERATION_CODE"]:
payload = {
"serverAddress": operationPayload["serverAddress"],
"serverPort": operationPayload["serverPort"],
"sharedSecret": operationPayload["sharedSecret"],
"dnsServer": operationPayload["dnsServer"]
};
break;
case androidOperationConstants["APPLICATION_OPERATION_CODE"]:
payload = {
"restrictionType": operationPayload["restriction-type"],
"restrictedApplications": operationPayload["restricted-applications"]
};
break;
}
@ -611,7 +861,40 @@ var operationModule = function () {
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"enabled" : operationData["cameraEnabled"]
"CAMERA" : operationData["cameraEnabled"],
"DISALLOW_ADJUST_VOLUME" : operationData["disallowAdjustVolumeEnabled"],
"DISALLOW_CONFIG_BLUETOOTH" : operationData["disallowConfigBluetooth"],
"DISALLOW_CONFIG_CELL_BROADCASTS" : operationData["disallowConfigCellBroadcasts"],
"DISALLOW_CONFIG_CREDENTIALS" : operationData["disallowConfigCredentials"],
"DISALLOW_CONFIG_MOBILE_NETWORKS" : operationData["disallowConfigMobileNetworks"],
"DISALLOW_CONFIG_TETHERING" : operationData["disallowConfigTethering"],
"DISALLOW_CONFIG_VPN" : operationData["disallowConfigVpn"],
"DISALLOW_CONFIG_WIFI" : operationData["disallowConfigWifi"],
"DISALLOW_APPS_CONTROL" : operationData["disallowAppControl"],
"DISALLOW_CREATE_WINDOWS" : operationData["disallowCreateWindows"],
"DISALLOW_CROSS_PROFILE_COPY_PASTE" : operationData["disallowCrossProfileCopyPaste"],
"DISALLOW_DEBUGGING_FEATURES" : operationData["disallowDebugging"],
"DISALLOW_FACTORY_RESET" : operationData["disallowFactoryReset"],
"DISALLOW_ADD_USER" : operationData["disallowAddUser"],
"DISALLOW_INSTALL_APPS" : operationData["disallowInstallApps"],
"DISALLOW_INSTALL_UNKNOWN_SOURCES" : operationData["disallowInstallUnknownSources"],
"DISALLOW_MODIFY_ACCOUNTS" : operationData["disallowModifyAccounts"],
"DISALLOW_MOUNT_PHYSICAL_MEDIA" : operationData["disallowMountPhysicalMedia"],
"DISALLOW_NETWORK_RESET" : operationData["disallowNetworkReset"],
"DISALLOW_OUTGOING_BEAM" : operationData["disallowOutgoingBeam"],
"DISALLOW_OUTGOING_CALLS" : operationData["disallowOutgoingCalls"],
"DISALLOW_REMOVE_USER" : operationData["disallowRemoveUser"],
"DISALLOW_SAFE_BOOT" : operationData["disallowSafeBoot"],
"DISALLOW_SHARE_LOCATION" : operationData["disallowLocationSharing"],
"DISALLOW_SMS" : operationData["disallowSMS"],
"DISALLOW_UNINSTALL_APPS" : operationData["disallowUninstallApps"],
"DISALLOW_UNMUTE_MICROPHONE" : operationData["disallowUnmuteMicrophone"],
"DISALLOW_USB_FILE_TRANSFER" : operationData["disallowUSBFileTransfer"],
"ALLOW_PARENT_PROFILE_APP_LINKING" : operationData["disallowParentProfileAppLinking"],
"ENSURE_VERIFY_APPS" : operationData["ensureVerifyApps"],
"AUTO_TIME" : operationData["enableAutoTime"],
"SET_SCREEN_CAPTURE_DISABLED" : operationData["diableScreenCapture"],
"SET_STATUS_BAR_DISABLED" : operationData["disableStatusBar"]
}
};
break;
@ -635,7 +918,18 @@ var operationModule = function () {
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"message" : operationData["message"]
//"message" : operationData["message"]
"messageText": operationData["messageText"],
"messageTitle": operationData["messageTitle"]
}
};
break;
case androidOperationConstants["UPGRADE_FIRMWARE"]:
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"schedule" : operationData["schedule"],
"server" : operationData["server"]
}
};
break;
@ -652,7 +946,47 @@ var operationModule = function () {
payload = {
"operation": {
"ssid": operationData["wifiSSID"],
"password": operationData["wifiPassword"]
"type": operationData["wifiType"],
"password" : operationData["wifiPassword"],
"eap" : operationData["wifiEAP"],
"phase2" : operationData["wifiPhase2"],
"provisioning" : operationData["wifiProvisioning"],
"identity" : operationData["wifiIdentity"],
"anonymousIdentity" : operationData["wifiAnoIdentity"],
"cacert" : operationData["wifiCaCert"],
"cacertName" : operationData["wifiCaCertName"]
}
};
break;
case androidOperationConstants["VPN_OPERATION_CODE"]:
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"serverAddress": operationData["serverAddress"],
"serverPort": operationData["serverPort"],
"sharedSecret": operationData["sharedSecret"],
"dnsServer": operationData["dnsServer"]
}
};
break;
case androidOperationConstants["LOCK_OPERATION_CODE"]:
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"message" : operationData["lock-message"],
"isHardLockEnabled" : operationData["hard-lock"]
}
};
break;
case androidOperationConstants["WORK_PROFILE_CODE"]:
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"profileName": operationData["workProfilePolicyProfileName"],
"enableSystemApps": operationData["workProfilePolicyEnableSystemApps"],
"hideSystemApps": operationData["workProfilePolicyHideSystemApps"],
"unhideSystemApps": operationData["workProfilePolicyUnhideSystemApps"],
"enablePlaystoreApps": operationData["workProfilePolicyEnablePlaystoreApps"]
}
};
break;
@ -670,6 +1004,14 @@ var operationModule = function () {
}
};
break;
case androidOperationConstants["APPLICATION_OPERATION_CODE"]:
payload = {
"operation": {
"restriction-type": operationData["restrictionType"],
"restricted-applications": operationData["restrictedApplications"]
}
};
break;
default:
// If the operation is neither of above, it is a command operation
operationType = operationTypeConstants["COMMAND"];
@ -686,28 +1028,31 @@ var operationModule = function () {
publicMethods.getAndroidServiceEndpoint = function (operationCode) {
var featureMap = {
"WIFI": "wifi",
"CAMERA": "camera",
"DEVICE_LOCK": "lock",
"WIFI": "configure-wifi",
"CAMERA": "control-camera",
"VPN": "configure-vpn",
"DEVICE_LOCK": "lock-devices",
"DEVICE_UNLOCK": "unlock-devices",
"DEVICE_LOCATION": "location",
"CLEAR_PASSWORD": "clear-password",
"APPLICATION_LIST": "get-application-list",
"DEVICE_RING": "ring-device",
"DEVICE_REBOOT": "reboot-device",
"DEVICE_RING": "ring",
"DEVICE_REBOOT": "reboot",
"UPGRADE_FIRMWARE": "upgrade-firmware",
"DEVICE_MUTE": "mute",
"NOTIFICATION": "notification",
"ENCRYPT_STORAGE": "encrypt",
"NOTIFICATION": "send-notification",
"ENCRYPT_STORAGE": "encrypt-storage",
"CHANGE_LOCK_CODE": "change-lock-code",
"WEBCLIP": "webclip",
"WEBCLIP": "set-webclip",
"INSTALL_APPLICATION": "install-application",
"UNINSTALL_APPLICATION": "uninstall-application",
"BLACKLIST_APPLICATIONS": "blacklist-applications",
"PASSCODE_POLICY": "password-policy",
"PASSCODE_POLICY": "set-password-policy",
"ENTERPRISE_WIPE": "enterprise-wipe",
"WIPE_DATA": "wipe-data"
"WIPE_DATA": "wipe"
};
return "/mdm-android-agent/operation/" + featureMap[operationCode];
//return "/mdm-android-agent/operation/" + featureMap[operationCode];
return "/api/device-mgt/android/v1.0/admin/devices/" + featureMap[operationCode];
};
/**
@ -852,9 +1197,10 @@ var operationModule = function () {
"DEVICE_RING": "fw-dial-up",
"DEVICE_REBOOT": "fw-refresh",
"UPGRADE_FIRMWARE": "fw-up-arrow",
"DEVICE_MUTE": "fw-incoming-call",
"DEVICE_MUTE": "fw-mute",
"NOTIFICATION": "fw-message",
"CHANGE_LOCK_CODE": "fw-security"
"CHANGE_LOCK_CODE": "fw-security",
"DEVICE_UNLOCK": "fw-lock"
};
return featureMap[operationCode];
};
@ -926,7 +1272,7 @@ var operationModule = function () {
var key = operationDataObj.data("key");
var value;
if (operationDataObj.is(":text") || operationDataObj.is("textarea") ||
operationDataObj.is(":password")) {
operationDataObj.is(":password") || operationDataObj.is(":hidden")) {
value = operationDataObj.val();
} else if (operationDataObj.is(":checkbox")) {
value = operationDataObj.is(":checked");
@ -939,7 +1285,8 @@ var operationModule = function () {
if (operationDataObj.hasClass("one-column-input-array")) {
$(".child-input", this).each(function () {
childInput = $(this);
if (childInput.is(":text") || childInput.is("textarea") || childInput.is(":password")) {
if (childInput.is(":text") || childInput.is("textarea") || childInput.is(":password")
|| childInput.is(":hidden")) {
childInputValue = childInput.val();
} else if (childInput.is(":checkbox")) {
childInputValue = childInput.is(":checked");
@ -965,7 +1312,8 @@ var operationModule = function () {
var joinedInput;
$(".child-input", this).each(function () {
childInput = $(this);
if (childInput.is(":text") || childInput.is("textarea") || childInput.is(":password")) {
if (childInput.is(":text") || childInput.is("textarea") || childInput.is(":password")
|| childInput.is(":hidden")) {
childInputValue = childInput.val();
} else if (childInput.is(":checkbox")) {
childInputValue = childInput.is(":checked");
@ -996,7 +1344,8 @@ var operationModule = function () {
$(".child-input", this).each(function () {
childInput = $(this);
childInputKey = childInput.data("child-key");
if (childInput.is(":text") || childInput.is("textarea") || childInput.is(":password")) {
if (childInput.is(":text") || childInput.is("textarea") || childInput.is(":password")
|| childInput.is(":hidden")) {
childInputValue = childInput.val();
} else if (childInput.is(":checkbox")) {
childInputValue = childInput.is(":checked");
@ -1024,6 +1373,7 @@ var operationModule = function () {
operationData[key] = value;
}
);
switch (platformType) {
case platformTypeConstants["ANDROID"]:
payload = privateMethods.generateAndroidOperationPayload(operationCode, operationData, deviceList);
@ -1087,58 +1437,94 @@ var operationModule = function () {
// var childInputValue;
if (operationDataObj.hasClass("one-column-input-array")) {
// generating input fields to populate complex value
for (i = 0; i < value.length; ++i) {
operationDataObj.parent().find("a").filterByData("click-event", "add-form").click();
}
// traversing through each child input
$(".child-input", this).each(function () {
childInput = $(this);
var childInputValue = value[childInputIndex];
// populating extracted value in the UI according to the input type
if (childInput.is(":text") ||
childInput.is("textarea") ||
childInput.is(":password") ||
childInput.is("select")) {
childInput.val(childInputValue);
} else if (childInput.is(":checkbox")) {
operationDataObj.prop("checked", childInputValue);
if (value) {
for (i = 0; i < value.length; ++i) {
operationDataObj.parent().find("a").filterByData("click-event", "add-form").click();
}
// incrementing childInputIndex
childInputIndex++;
});
// traversing through each child input
$(".child-input", this).each(function () {
childInput = $(this);
var childInputValue = value[childInputIndex];
// populating extracted value in the UI according to the input type
if (childInput.is(":text") ||
childInput.is(":hidden") ||
childInput.is("textarea") ||
childInput.is(":password") ||
childInput.is("select")) {
childInput.val(childInputValue);
} else if (childInput.is(":checkbox")) {
operationDataObj.prop("checked", childInputValue);
}
// incrementing childInputIndex
childInputIndex++;
});
}
} else if (operationDataObj.hasClass("valued-check-box-array")) {
// traversing through each child input
$(".child-input", this).each(function () {
childInput = $(this);
// check if corresponding value of current checkbox exists in the array of values
if (value.indexOf(childInput.data("value")) != -1) {
// if YES, set checkbox as checked
childInput.prop("checked", true);
if (value) {
if (value.indexOf(childInput.data("value")) != -1) {
// if YES, set checkbox as checked
childInput.prop("checked", true);
}
}
});
} else if (operationDataObj.hasClass("multi-column-joined-input-array")) {
// generating input fields to populate complex value
for (i = 0; i < value.length; ++i) {
operationDataObj.parent().find("a").filterByData("click-event", "add-form").click();
if (value) {
for (i = 0; i < value.length; ++i) {
operationDataObj.parent().find("a").filterByData("click-event", "add-form").click();
}
var columnCount = operationDataObj.data("column-count");
var multiColumnJoinedInputArrayIndex = 0;
// handling scenarios specifically
if (operationDataObj.attr("id") == "wifi-mcc-and-mncs") {
// traversing through each child input
$(".child-input", this).each(function () {
childInput = $(this);
var multiColumnJoinedInput = value[multiColumnJoinedInputArrayIndex];
var childInputValue;
if ((childInputIndex % columnCount) == 0) {
childInputValue = multiColumnJoinedInput.substring(3, 0)
} else {
childInputValue = multiColumnJoinedInput.substring(3);
// incrementing childInputIndex
multiColumnJoinedInputArrayIndex++;
}
// populating extracted value in the UI according to the input type
if (childInput.is(":text") ||
childInput.is(":hidden") ||
childInput.is("textarea") ||
childInput.is(":password") ||
childInput.is("select")) {
childInput.val(childInputValue);
} else if (childInput.is(":checkbox")) {
operationDataObj.prop("checked", childInputValue);
}
// incrementing childInputIndex
childInputIndex++;
});
}
}
var columnCount = operationDataObj.data("column-count");
var multiColumnJoinedInputArrayIndex = 0;
// handling scenarios specifically
if (operationDataObj.attr("id") == "wifi-mcc-and-mncs") {
} else if (operationDataObj.hasClass("multi-column-key-value-pair-array")) {
// generating input fields to populate complex value
if (value) {
for (i = 0; i < value.length; ++i) {
operationDataObj.parent().find("a").filterByData("click-event", "add-form").click();
}
columnCount = operationDataObj.data("column-count");
var multiColumnKeyValuePairArrayIndex = 0;
// traversing through each child input
$(".child-input", this).each(function () {
childInput = $(this);
var multiColumnJoinedInput = value[multiColumnJoinedInputArrayIndex];
var childInputValue;
if ((childInputIndex % columnCount) == 0) {
childInputValue = multiColumnJoinedInput.substring(3, 0)
} else {
childInputValue = multiColumnJoinedInput.substring(3);
// incrementing childInputIndex
multiColumnJoinedInputArrayIndex++;
}
var multiColumnKeyValuePair = value[multiColumnKeyValuePairArrayIndex];
var childInputKey = childInput.data("child-key");
var childInputValue = multiColumnKeyValuePair[childInputKey];
// populating extracted value in the UI according to the input type
if (childInput.is(":text") ||
childInput.is(":hidden") ||
childInput.is("textarea") ||
childInput.is(":password") ||
childInput.is("select")) {
@ -1146,39 +1532,14 @@ var operationModule = function () {
} else if (childInput.is(":checkbox")) {
operationDataObj.prop("checked", childInputValue);
}
// incrementing multiColumnKeyValuePairArrayIndex for the next row of inputs
if ((childInputIndex % columnCount) == (columnCount - 1)) {
multiColumnKeyValuePairArrayIndex++;
}
// incrementing childInputIndex
childInputIndex++;
});
}
} else if (operationDataObj.hasClass("multi-column-key-value-pair-array")) {
// generating input fields to populate complex value
for (i = 0; i < value.length; ++i) {
operationDataObj.parent().find("a").filterByData("click-event", "add-form").click();
}
columnCount = operationDataObj.data("column-count");
var multiColumnKeyValuePairArrayIndex = 0;
// traversing through each child input
$(".child-input", this).each(function () {
childInput = $(this);
var multiColumnKeyValuePair = value[multiColumnKeyValuePairArrayIndex];
var childInputKey = childInput.data("child-key");
var childInputValue = multiColumnKeyValuePair[childInputKey];
// populating extracted value in the UI according to the input type
if (childInput.is(":text") ||
childInput.is("textarea") ||
childInput.is(":password") ||
childInput.is("select")) {
childInput.val(childInputValue);
} else if (childInput.is(":checkbox")) {
operationDataObj.prop("checked", childInputValue);
}
// incrementing multiColumnKeyValuePairArrayIndex for the next row of inputs
if ((childInputIndex % columnCount) == (columnCount - 1)) {
multiColumnKeyValuePairArrayIndex++;
}
// incrementing childInputIndex
childInputIndex++;
});
}
}
}
@ -1197,8 +1558,29 @@ var operationModule = function () {
for (var i = 0; i < operationCodes.length; ++i) {
var operationCode = operationCodes[i];
var payload = publicMethods.generatePayload(platformType, operationCode, null);
generatedProfile[operationCode] = payload["operation"];
if(platformType == platformTypeConstants["ANDROID"] &&
operationCodes[i] == androidOperationConstants["CAMERA_OPERATION_CODE"]){
var operations = payload["operation"];
for (var key in operations){
operationCode = key;
var restriction = false;
if(operations[key]){
restriction = true;
}
var payloadResult = {
"operation": {
"enabled" : restriction
}
};
generatedProfile[operationCode] = payloadResult["operation"];
}
} else {
generatedProfile[operationCode] = payload["operation"];
}
}
console.log(generatedProfile);
return generatedProfile;
};
@ -1211,14 +1593,125 @@ var operationModule = function () {
*/
publicMethods.populateProfile = function (platformType, payload) {
var i, configuredOperations = [];
var restrictions = {};
for (i = 0; i < payload.length; ++i) {
var configuredFeature = payload[i];
var featureCode = configuredFeature["featureCode"];
var operationPayload = configuredFeature["content"];
if(platformType == platformTypeConstants["ANDROID"]){
var restriction = JSON.parse(operationPayload);
if(featureCode == androidOperationConstants["CAMERA_OPERATION_CODE"]){
restrictions["cameraEnabled"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_ADJUST_VOLUME"]){
restrictions["disallowAdjustVolumeEnabled"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_BLUETOOTH"]){
restrictions["disallowConfigBluetooth"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_CELL_BROADCASTS"]){
restrictions["disallowConfigCellBroadcasts"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_CREDENTIALS"]){
restrictions["disallowConfigCredentials"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_MOBILE_NETWORKS"]){
restrictions["disallowConfigMobileNetworks"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_TETHERING"]){
restrictions["disallowConfigTethering"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_VPN"]){
restrictions["disallowConfigVpn"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_WIFI"]){
restrictions["disallowConfigWifi"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_APPS_CONTROL"]){
restrictions["disallowAppControl"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CREATE_WINDOWS"]){
restrictions["disallowCreateWindows"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CROSS_PROFILE_COPY_PASTE"]){
restrictions["disallowCrossProfileCopyPaste"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_DEBUGGING_FEATURES"]){
restrictions["disallowDebugging"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_FACTORY_RESET"]){
restrictions["disallowFactoryReset"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_ADD_USER"]){
restrictions["disallowAddUser"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_INSTALL_APPS"]){
restrictions["disallowInstallApps"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_INSTALL_UNKNOWN_SOURCES"]){
restrictions["disallowInstallUnknownSources"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_MODIFY_ACCOUNTS"]){
restrictions["disallowModifyAccounts"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_MOUNT_PHYSICAL_MEDIA"]){
restrictions["disallowMountPhysicalMedia"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_NETWORK_RESET"]){
restrictions["disallowNetworkReset"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_OUTGOING_BEAM"]){
restrictions["disallowOutgoingBeam"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_OUTGOING_CALLS"]){
restrictions["disallowOutgoingCalls"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_REMOVE_USER"]){
restrictions["disallowRemoveUser"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_SAFE_BOOT"]){
restrictions["disallowSafeBoot"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_SHARE_LOCATION"]){
restrictions["disallowLocationSharing"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_SMS"]){
restrictions["disallowSMS"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_UNINSTALL_APPS"]){
restrictions["disallowUninstallApps"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_UNMUTE_MICROPHONE"]){
restrictions["disallowUnmuteMicrophone"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_USB_FILE_TRANSFER"]){
restrictions["disallowUSBFileTransfer"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["ALLOW_PARENT_PROFILE_APP_LINKING"]){
restrictions["disallowParentProfileAppLinking"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["ENSURE_VERIFY_APPS"]){
restrictions["ensureVerifyApps"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["AUTO_TIME"]){
restrictions["enableAutoTime"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["SET_SCREEN_CAPTURE_DISABLED"]){
restrictions["diableScreenCapture"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["SET_STATUS_BAR_DISABLED"]){
restrictions["disableStatusBar"] = restriction["enabled"];
continue;
}
}
//push the feature-code to the configuration array
configuredOperations.push(featureCode);
publicMethods.populateUI(platformType, featureCode, operationPayload);
}
if (typeof restrictions.cameraEnabled !== 'undefined') {
configuredOperations.push(androidOperationConstants["CAMERA_OPERATION_CODE"]);
publicMethods.populateUI(platformType, androidOperationConstants["CAMERA_OPERATION_CODE"], JSON.stringify(restrictions));
}
return configuredOperations;
};

@ -1,83 +1,306 @@
{{!
Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
{{#zone "content"}}
<div class="row">
<div class="col-md-12">
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
<div class="wr-steps hidden">
<div class="col-md-3 col-xs-3">
<div class="itm-wiz itm-wiz-current" data-step="policy-platform">
<div class="wiz-no">1</div>
<div class="wiz-lbl hidden-xs"><span>Select a platform</span></div>
</div>
<br class="c-both"/>
</div>
<div class="col-md-3 col-xs-3">
<div class="itm-wiz" data-step="policy-profile">
<div class="wiz-no">2</div>
<div class="wiz-lbl hidden-xs"><span>Configure profile</span></div>
</div>
<br class="c-both"/>
</div>
<div class="col-md-3 col-xs-3">
<div class="itm-wiz" data-step="policy-criteria">
<div class="wiz-no">3</div>
<div class="wiz-lbl hidden-xs"><span>Assign to groups</span></div>
</div>
<br class="c-both"/>
</div>
<div class="col-md-3 col-xs-3">
<div class="itm-wiz" data-step="policy-naming">
<div class="wiz-no">4</div>
<div class="wiz-lbl hidden-xs"><span>Publish to devices</span></div>
</div>
<br class="c-both"/>
</div>
</div>
http://www.apache.org/licenses/LICENSE-2.0
<div class="container col-centered policy-message hidden">
<div class="wr-form">
<h1 id="policy-message-page-wizard-title" class="page-sub-title">Policy creation is successful.</h1>
<br>Please click <b>"Add Another Policy"</b>, if you wish to add another policy or click
<b>"View policy list"</b> to complete the process and go back to the policy list.
<hr>
<button class="wr-btn wizard-stepper" data-current="policy-message" data-direct="/emm/policies/">
View policy list
</button>
<a href="/emm/policies/add-policy" class="cu-btn-inner">
<span class="fw-stack">
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-add fw-stack-1x"></i>
</span>
Add another policy
</a>
</div>
</div>
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.
}}
<div class="row">
<div class="col-md-12">
<div class="container col-centered wr-content policy-platform">
<div class="wr-form">
<h1 id="policy-platform-page-wizard-title" class="page-sub-title">ADD POLICY</h1>
<hr>
<div id="policy-platform-wizard-steps" class="row wr-wizard">
<div class="col-md-3 col-xs-3">
<div class="itm-wiz itm-wiz-current" data-step="policy-platform">
<div class="wiz-no">1</div>
<div class="wiz-lbl hidden-xs"><span>Select a platform</span></div>
</div>
<br class="c-both"/>
<div class="container col-centered wr-content policy-naming hidden">
<div class="wr-form">
<h1 id="policy-naming-page-wizard-title" class="page-sub-title">ADD POLICY</h1>
<hr>
<div id="policy-naming-wizard-steps" class="row wr-wizard"></div>
<hr>
<div class="row">
<div class="col-lg-12">
<h4 class="visible-xs">Step 4: Publish to devices</h4>
<br>
<div id="policy-naming-main-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
</div>
<div class="col-md-3 col-xs-3">
<div class="itm-wiz" data-step="policy-profile">
<div class="wiz-no">2</div>
<div class="wiz-lbl hidden-xs"><span>Configure profile</span></div>
<div>
<label class="wr-input-label">Set a Name for your Policy *</label>
<br/>
<label class="wr-input-label">
(Policy name should be 1-to-30 characters long)
</label>
<div id="policyNameField" class="wr-input-control">
<div class="cus-col-50 form-group wr-input-control">
<input id="policy-name-input" class="form-control" type="text" value=""/>
<label class="error nameEmpty hidden" for="summary">Policy name is required & Should be be 1-to-30 characters long.</label>
</div>
<br class="c-both"/>
</div>
<br class="c-both"/>
</div>
<div class="col-md-3 col-xs-3">
<div class="itm-wiz" data-step="policy-criteria">
<div class="wiz-no">3</div>
<div class="wiz-lbl hidden-xs"><span>Assign</span></div>
<label class="wr-input-label">
Add a description
</label>
<div class="wr-input-control">
<div class="cus-col-50">
<textarea id="policy-description-input" class="form-control" rows="10"
placeholder="[ Summary about the policy ]"></textarea>
</div>
<br class="c-both"/>
</div>
<br class="c-both"/>
</div>
<div class="col-md-3 col-xs-3">
<div class="itm-wiz" data-step="policy-naming">
<div class="wiz-no">4</div>
<div class="wiz-lbl hidden-xs"><span>Publish to devices</span></div>
</div>
<br class="c-both"/>
<div class="wr-input-control wr-btn-grp">
<a href="javascript:void(0)" class="wr-btn wizard-stepper" data-is-back-btn="true" data-current="policy-naming" data-next="policy-criteria">Back</a>
<a href="javascript:void(0)" class="wr-btn wizard-stepper" data-current="policy-naming-publish" data-next="policy-message" data-validate="true">Publish to Devices</a>
<a href="javascript:void(0)" class="wr-btn wizard-stepper" data-current="policy-naming" data-next="policy-message" data-validate="true">Save</a>
</div>
</div>
<hr>
<div class="row">
<div class="col-lg-12">
<h4>Step 1: Select a platform</h4>
<br>
</div>
</div>
</div>
<div class="row wr-tile-buttons-list">
<div class="container col-centered wr-content policy-criteria hidden">
<div class="wr-form">
<h1 id="policy-criteria-page-wizard-title" class="page-sub-title">ADD POLICY</h1>
<hr>
<div id="policy-criteria-wizard-steps" class="row wr-wizard"></div>
<hr>
<div class="row">
<div class="col-lg-12">
<h4 class="visible-xs">Step 3: Assign to groups</h4>
<br>
<div id="policy-criteria-main-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
</div>
<div>
<label class="wr-input-label">
Set device ownership type
</label>
<div class="wr-input-control">
<div class="cus-col-50">
<select id="ownership-input" class="form-control">
<option value="ANY" selected>ANY</option>
<option value="BYOD">BYOD (Bring Your Own Device)</option>
<option value="COPE">COPE (Corporate-Owned, Personally Enabled)</option>
</select>
</div>
<br class="c-both"/>
</div>
<div class="wr-input-control">
<label class="wr-input-control radio light">
<input id="user-roles-radio-btn" type="radio" name="select-users-radio-btn"
class="select-users-radio" checked/>
<span class="helper">&nbsp;Set user role(s)</span>
</label>
<label class="wr-input-control radio light" rel="assetfilter">
<input id="users-radio-btn" type="radio" name="select-users-radio-btn"
class="select-users-radio"/>
<span class="helper">&nbsp;Set user(s)</span>
</label>
</div>
<div id="user-roles-select-field" class="select-users">
<div class="wr-input-control">
<div class="cus-col-50">
<select id="user-roles-input" class="form-control select2"
multiple="multiple">
<option value="ANY" selected>ANY</option>
{{#each roles}}
<option>{{this}}</option>
{{/each}}
</select>
</div>
<br class="c-both"/>
</div>
</div>
<div id="users-select-field" class="select-users">
<div class="wr-input-control">
<ul class="tile-buttons row">
{{#each types}}
<li class="col-lg-4"
style="margin-top: 5px;margin-bottom: 5px;">
<a href="{{@app.context}}/policy/add/{{name}}"
class="wizard-stepper">
<img src="{{icon}}" width="50px"
height="50px"><br><br>
<b>{{label}}</b>
</a>
</li>
{{/each}}
</ul>
<div class="cus-col-50">
<select id="users-input" class="form-control select2" multiple="multiple">
</select>
</div>
<br class="c-both"/>
</div>
</div>
<br>
<label class="wr-input-label" title="">
Set an action upon non-compliance
</label>
<div class="wr-input-control">
<div class="cus-col-50">
<select id="action-input" class="form-control">
<option data-action="enforce" selected>Enforce</option>
<option data-action="warn">Warn</option>
<option data-action="monitor">Monitor</option>
</select>
</div>
<br class="c-both"/>
</div>
</div>
<div class="wr-input-control wr-btn-grp">
<a href="javascript:void(0)" class="wr-btn wizard-stepper" data-is-back-btn="true" data-current="policy-criteria" data-next="policy-profile">Back</a>
<a href="javascript:void(0)" class="wr-btn wizard-stepper" data-current="policy-criteria" data-next="policy-naming" data-validate="true">Continue</a>
</div>
</div>
</div>
</div>
<!-- content -->
</div>
</div>
<div class="container col-centered wr-content policy-profile hidden">
<div class="wr-form">
<h1 id="policy-profile-page-wizard-title" class="page-sub-title">ADD POLICY</h1>
<hr>
<div id="policy-profile-wizard-steps" class="row wr-wizard"></div>
<hr>
<div class="row">
<div class="col-lg-12">
<h4 class="visible-xs">Step 2: Configure profile</h4>
<br>
<div id="policy-profile-main-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
</div>
<div class="wr-advance-operations">
<div class="wr-advance-operations-init">
<br>
&nbsp;&nbsp;&nbsp;&nbsp;<i class="fw fw-settings fw-spin fw-2x"></i>
&nbsp;&nbsp;&nbsp;Loading platform features . . .
<br><br>
</div>
</div>
<div class="wr-input-control wr-btn-grp">
<a href="javascript:void(0)" class="wr-btn wizard-stepper" data-is-back-btn="true" data-current="policy-profile" data-next="policy-platform">Back</a>
<a href="javascript:void(0)" class="wr-btn wizard-stepper" data-current="policy-profile" data-next="policy-criteria" data-validate="true">Continue</a>
</div>
</div>
</div>
</div>
</div>
<div id="loading-content" class="col-centered">
<br><br>
&nbsp;&nbsp;<i class="fw fw-settings fw-spin fw-2x"></i>
&nbsp;&nbsp;&nbsp;Loading policy creation wizard . . .
<br><br>
</div>
<div class="container col-centered wr-content policy-platform hidden">
<div class="wr-form">
<h1 id="policy-platform-page-wizard-title" class="page-sub-title">ADD POLICY</h1>
<hr>
<div id="policy-platform-wizard-steps" class="row wr-wizard"></div>
<hr>
<!--<div id="policy-platform-main-error-msg" class="alert alert-danger hidden" role="alert">-->
<!--<i class="icon fw fw-error"></i><span></span>-->
<!--</div>-->
<div class="row">
<div class="col-lg-12">
<h4 class="visible-xs"> Step 1: Select a platform</h4>
<br>
<div id="policy-platform-main-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
</div>
<div id="supportedPlatforms" class="hidden"
{{#each deviceTypes}}
{{#equal this "android"}}
data-android="true"
data-android-type={{this}}
{{/equal}}
{{#equal this "ios"}}
data-ios="true"
data-ios-type={{this}}
{{/equal}}
{{#equal this "windows"}}
data-windows="true"
data-windows-type={{this}}
{{/equal}}
{{/each}}
></div>
<div class="row wr-tile-buttons-list">
<div class="wr-input-control">
<ul class="tile-buttons row">
<li class="col-xs-12 col-sm-12 col-md- 4 col-lg-4">
<a href="javascript:void(0)" class="android-platform wizard-stepper"
data-current="policy-platform" data-next="policy-profile"
data-platform="android" data-validate="false">
<i class="fw fw-android"></i>
<b>Android</b>
</a>
</li>
<li class="col-xs-12 col-sm-12 col-md- 4 col-lg-4">
<a href="javascript:void(0)" class="ios-platform wizard-stepper"
data-current="policy-platform" data-next="policy-profile"
data-platform="ios" data-validate="false">
<i class="fw fw-apple"></i>
<b>Apple iOS</b>
</a>
</li>
<li class="col-xs-12 col-sm-12 col-md- 4 col-lg-4">
<a href="javascript:void(0)" class="windows-platform wizard-stepper"
data-current="policy-platform" data-next="policy-profile"
data-platform="windows" data-validate="false">
<i class="fw fw-windows"></i>
<b>Windows Phone</b>
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- content -->
</div>
</div>
{{/zone}}
{{#zone "bottomJs"}}
<!--suppress HtmlUnknownTarget -->
<script id="hidden-operations-ios" src="{{@unit.publicUri}}/templates/hidden-operations-ios.hbs"
type="text/x-handlebars-template"></script>
<!--suppress HtmlUnknownTarget -->
<script id="hidden-operations-android" src="{{@unit.publicUri}}/templates/hidden-operations-android.hbs"
type="text/x-handlebars-template"></script>
<!--suppress HtmlUnknownTarget -->
<script id="hidden-operations-windows" src="{{@unit.publicUri}}/templates/hidden-operations-windows.hbs"
type="text/x-handlebars-template"></script>
{{js "js/create.js"}}
{{/zone}}

@ -17,32 +17,46 @@
*/
function onRequest(context) {
var DTYPE_CONF_DEVICE_TYPE_KEY = "deviceType";
var DTYPE_CONF_DEVICE_TYPE_LABEL_KEY = "label";
// var DTYPE_CONF_DEVICE_TYPE_KEY = "deviceType";
// var DTYPE_CONF_DEVICE_TYPE_LABEL_KEY = "label";
//
// var utility = require("/app/modules/utility.js").utility;
// var userModule = require("/app/modules/business-controllers/user.js")["userModule"];
//
// var types = {};
// types["types"] = [];
// var typesListResponse = userModule.getPlatforms();
// if (typesListResponse["status"] == "success") {
// for (var type in typesListResponse["content"]) {
// var content = {};
// var deviceType = typesListResponse["content"]["deviceTypes"][type];
// content["name"] = deviceType;
// var configs = utility.getDeviceTypeConfig(deviceType);
// var deviceTypeLabel = deviceType;
// if (configs && configs[DTYPE_CONF_DEVICE_TYPE_KEY][DTYPE_CONF_DEVICE_TYPE_LABEL_KEY]) {
// deviceTypeLabel = configs[DTYPE_CONF_DEVICE_TYPE_KEY][DTYPE_CONF_DEVICE_TYPE_LABEL_KEY];
// }
// var policyWizard = new File("/app/units/" + utility.getTenantedDeviceUnitName(deviceType, "policy-wizard"));
// if(policyWizard.isExists()){
// content["icon"] = utility.getDeviceThumb(deviceType);
// content["label"] = deviceTypeLabel;
// types["types"].push(content);
// }
// }
// }
// return types;
var utility = require("/app/modules/utility.js").utility;
//var log = new Log("units/policy-create/policy-create.js");
var userModule = require("/app/modules/business-controllers/user.js")["userModule"];
var types = {};
types["types"] = [];
var typesListResponse = userModule.getPlatforms();
if (typesListResponse["status"] == "success") {
for (var type in typesListResponse["content"]) {
var content = {};
var deviceType = typesListResponse["content"]["deviceTypes"][type];
content["name"] = deviceType;
var configs = utility.getDeviceTypeConfig(deviceType);
var deviceTypeLabel = deviceType;
if (configs && configs[DTYPE_CONF_DEVICE_TYPE_KEY][DTYPE_CONF_DEVICE_TYPE_LABEL_KEY]) {
deviceTypeLabel = configs[DTYPE_CONF_DEVICE_TYPE_KEY][DTYPE_CONF_DEVICE_TYPE_LABEL_KEY];
}
var policyWizard = new File("/app/units/" + utility.getTenantedDeviceUnitName(deviceType, "policy-wizard"));
if(policyWizard.isExists()){
content["icon"] = utility.getDeviceThumb(deviceType);
content["label"] = deviceTypeLabel;
types["types"].push(content);
}
}
var result = userModule.getRolesByUserStore();
if (result["status"] == "success") {
context["roles"] = result["content"];
}
return types;
result = userModule.getPlatforms();
if (result["status"] == "success") {
context["deviceTypes"] = result["content"]["deviceTypes"];
}
return context;
}

@ -0,0 +1,566 @@
<div class="row no-gutter">
<div class="wr-hidden-operations-nav col-lg-4">
<a href="javascript:void(0)" onclick="showAdvanceOperation('passcode-policy', this)" class="selected">
<span class="wr-hidden-operations-icon fw-stack">
<i class="fw fw-key fw-stack-2x"></i>
</span>
Passcode Policy
<span id="passcode-policy-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="passcode-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="passcode-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('camera', this)">
<span class="wr-hidden-operations-icon fw-stack">
<i class="fw fw-block fw-stack-2x"></i>
</span>
Restrictions on Camera
<span id="camera-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="camera-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span class="camera-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('encrypt-storage', this)">
<span class="wr-hidden-operations-icon fw-stack">
<i class="fw fw-security fw-stack-2x"></i>
</span>
Encryption Settings
<span id="encrypt-storage-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="encrypt-storage-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="encrypt-storage-error" class="encryption-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('app-restriction', this)">
<span class="fw-stack fw-lg">
<i class="fw fw-application fw-stack-1x"></i>
<i class="fw fw-block fw-stack-2x"></i>
</span>
Applications Restrictions
<span id="app-restriction-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="app-restriction-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="app-restriction-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<!--<a href="javascript:void(0)" onclick="showAdvanceOperation('wifi', this)">-->
<!--<span class="wr-hidden-operations-icon fw-stack">-->
<!--<i class="fw fw-wifi fw-stack-2x"></i>-->
<!--</span>-->
<!--Wi-Fi Settings-->
<!--<span id="wifi-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>-->
<!--<span id="wifi-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>-->
<!--<span id="wifi-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>-->
<!--</a>-->
<!--<a href="javascript:void(0)" onclick="showAdvanceOperation('install-apps', this)">-->
<!--<span class="wr-hidden-operations-icon fw-stack">-->
<!--<i class="fw fw-application fw-stack-2x"></i>-->
<!--</span>-->
<!--App Installations-->
<!--</a>-->
<!--<a href="javascript:void(0)" onclick="showAdvanceOperation('blacklist-apps', this)">-->
<!--<span class="wr-hidden-operations-icon fw-stack">-->
<!--<i class="fw fw-block fw-stack-2x"></i>-->
<!--</span>-->
<!--App Blacklisting-->
<!--</a>-->
<!--<a href="javascript:void(0)" onclick="showAdvanceOperation('web-clips', this)">-->
<!--<span class="wr-hidden-operations-icon fw-stack">-->
<!--<i class="fw fw-website fw-stack-2x"></i>-->
<!--</span>-->
<!--Web clips-->
<!--</a>-->
</div>
<div class="wr-hidden-operations-content col-lg-8">
<!-- passcode-policy -->
<div class="wr-hidden-operation" data-operation="passcode-policy" style="display: block">
<div class="panel panel-default operation-data" data-operation="passcode-policy" data-operation-code="PASSCODE_POLICY">
<div id="passcode-policy-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title">
Passcode Policy
<label id="passcode-policy-lbl" class="wr-input-control switch" data-toggle="collapse" data-target="#passcode-policy-body">
<input type="checkbox" />
<span class="helper"></span>
<span class="text"></span>
</label>
<hr>
<div class="panel-title-description">
This configuration can be used to set a passcode policy to an Windows Device.
Once this configuration profile is installed on a device, corresponding users will not be able
to modify these settings on their devices.
</div>
</h2>
</div>
<div id="passcode-policy-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="passcode-policy-body">
<div id="passcode-policy-feature-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
</div>
<div class="wr-input-control">
<label class="wr-input-control checkbox">
<input id="passcode-policy-allow-simple" type="checkbox" class="form-control operationDataKeys" data-key="passcodePolicyAllowSimple" checked="checked" />
<span class="helper" title="Permit the use of repeating, ascending and descending character sequences">
&nbsp;&nbsp;&nbsp;Allow simple value
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
</div>
<div class="wr-input-control">
<label class="wr-input-control checkbox">
<input id="passcode-policy-require-alphanumeric" type="checkbox" class="form-control operationDataKeys" data-key="passcodePolicyRequireAlphanumeric" checked="checked" />
<span class="helper" title="Require passcode to contain both letters and numbers">
&nbsp;&nbsp;&nbsp;Require alphanumeric value
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
</div>
<div class="wr-input-control">
<label class="wr-input-label" for="passcode-policy-min-length">
Minimum passcode length
<span class="helper" title="Minimum number of characters allowed in a passcode">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
<select id="passcode-policy-min-length" class="form-control operationDataKeys" data-key="passcodePolicyMinLength" data-default="0">
<option value="" selected="selected">
None
</option>
<option value="4">04</option>
<option value="5">05</option>
<option value="6">06</option>
<option value="7">07</option>
<option value="8">08</option>
<option value="9">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
</select>
</div>
<div class="wr-input-control">
<label class="wr-input-label" for="passcode-policy-min-complex-chars">
Minimum number of complex characters
<span class="helper" title="Minimum number of complex or non-alphanumeric characters allowed in a passcode">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
<select id="passcode-policy-min-complex-chars" class="form-control operationDataKeys" data-key="passcodePolicyMinComplexChars" data-default="0">
<option value="" selected="selected">
None
</option>
<option value="1">01</option>
<option value="2">02</option>
<option value="3">03</option>
<option value="4">04</option>
<option value="5">05</option>
</select>
</div>
<div class="wr-input-control">
<label class="wr-input-label" for="passcode-policy-max-passcode-age-in-days">
Maximum passcode age in days
<span class="helper" title="Number of days after which a passcode must be changed">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
<br>
( Should be in between 1-to-730 days or none )
</label>
<input id="passcode-policy-max-passcode-age-in-days" type="text" class="form-control operationDataKeys" data-key="passcodePolicyMaxPasscodeAgeInDays" maxlength="3" placeholder="[ Requires Number Input ]">
</div>
<div class="wr-input-control">
<label class="wr-input-label" for="passcode-policy-passcode-history">
Passcode history
<span class="helper" title="Number of consequent unique passcodes to be used before reuse">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
<br>
( Should be in between 1-to-50 passcodes or none )
</label>
<input id="passcode-policy-passcode-history" type="text" class="form-control operationDataKeys" data-key="passcodePolicyPasscodeHistory" maxlength="2" placeholder="[ Requires Number Input ]">
</div>
<div class="wr-input-control">
<label class="wr-input-label" for="passcodePolicyMaxFailedAttempts">
Maximum number of failed attempts
<span class="helper" title="Maximum number of passcode entry attempts allowed before all data on a device will be erased">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
<select id="passcode-policy-max-failed-attempts" class="form-control operationDataKeys" data-key="passcodePolicyMaxFailedAttempts" data-default="0">
<option value="" selected="selected">
None
</option>
<option value="3">03</option>
<option value="4">04</option>
<option value="5">05</option>
<option value="6">06</option>
<option value="7">07</option>
<option value="8">08</option>
<option value="9">09</option>
<option value="10">10</option>
</select>
</div>
</div>
</div>
</div>
<!-- /passcode-policy -->
<!-- camera -->
<div class="wr-hidden-operation" data-operation="camera">
<div class="panel panel-default operation-data" data-operation="camera" data-operation-code="CAMERA">
<div id="camera-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title">
Restrictions on Camera
<label class="wr-input-control switch" data-toggle="collapse" data-target="#camera-body">
<input type="checkbox" />
<span class="helper"></span>
<span class="text"></span>
</label>
<hr>
<div class="panel-title-description">
This configuration can be used to restrict the usage of camera on an Windows device together with all the applications using the camera.
Once this configuration profile is installed on a device, corresponding users will not be able
to modify these settings on their devices.
</div>
</h2>
</div>
<div id="camera-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="camera-body">
<div id="camera-feature-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
</div>
Un-check following checkbox in case you need to disable camera.
<br>
<br>
<div class="wr-input-control">
<label class="wr-input-control checkbox">
<input id="camera-enabled" type="checkbox" class="operationDataKeys" data-key="cameraEnabled" checked="checked" />
<span class="helper" title="Having this checked would enable Usage of phone camera in the device.">
&nbsp;&nbsp;&nbsp;Allow use of camera
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
</div>
<br>
</div>
</div>
</div>
<!-- /camera -->
<!-- encrypt-storage -->
<div class="wr-hidden-operation" data-operation="encrypt-storage">
<div class="panel panel-default operation-data" data-operation="encrypt-storage" data-operation-code="ENCRYPT_STORAGE">
<div id="encrypt-storage-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title">
Encryption Settings
<label class="wr-input-control switch" data-toggle="collapse" data-target="#encrypt-storage-body">
<input type="checkbox" />
<span class="helper"></span>
<span class="text"></span>
</label>
<hr>
<div class="panel-title-description">
This configuration can be used to encrypt data on an Windows device, when the device is locked and
make it readable when the passcode is entered. Once this configuration profile is installed on a device,
corresponding users will not be able to modify these settings on their devices.
</div>
</h2>
</div>
<div id="encrypt-storage-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="encrypt-storage-body">
<div id="encrypt-storage-feature-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
</div>
Un-check following checkbox in case you need to disable storage-encryption.
<br>
<br>
<div class="wr-input-control">
<label class="wr-input-control checkbox">
<input id="encrypt-storage-enabled" type="checkbox" class="operationDataKeys" data-key="encryptStorageEnabled" checked="checked" />
<span class="helper" title="Having this checked would enable Storage-encryption in the device">
&nbsp;&nbsp;&nbsp;Enable storage-encryption
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
</div>
<br>
</div>
</div>
</div>
<!-- /encrypt-storage -->
<!--app-restriction-->
<div class="wr-hidden-operation" data-operation="app-restriction">
<div class="panel panel-default operation-data" data-operation="app-restriction" data-operation-code="APP-RESTRICTION">
<div id="app-restriction-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title">
Application Restriction Settings
<label class="wr-input-control switch" data-toggle="collapse" data-target="#app-restriction-body">
<input type="checkbox" />
<span class="helper"></span>
<span class="text"></span>
</label>
<hr>
<div class="panel-title-description">
This configuration can be used to create a black list or white list of applications.
</div>
</h2>
</div>
<div id="app-restriction-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="app-restriction-body">
<div id="app-restriction-feature-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
</div>
<select id="app-restriction-type" class="form-control operationDataKeys" data-key="restrictionType">
<option value="" selected="selected">
None
</option>
<option value="black-list">Black List</option>
<option value="white-list">White List</option>
</select>
<div class="wr-input-control">
<label class="wr-input-label" for="restricted-applications">
Restricted Application List
<span class="helper" title="Add an application to restrict.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
<br>
<a href="#restricted-applications-grid" class="grid-input-add" data-click-event="add-form">
<span class="icon fw-stack">
<i class="fw fw-add fw-stack-1x"></i>
<i class="fw fw-ring fw-stack-2x"></i>
</span>
&nbsp;
Add Application
</a>
</label>
<div id="restricted-applications" class="operationDataKeys grouped-array-input multi-column-key-value-pair-array" data-key="restrictedApplications" data-column-count="2">
<table class="table table-responsive table-striped">
<thead>
<tr>
<th>No:</th>
<th>Application Name/Description</th>
<th>Package Name</th>
<th></th>
</tr>
</thead>
<tbody data-add-form-container="#restricted-applications-grid">
<tr data-help-text="add-form">
<td colspan="4">
No entries added yet .
</td>
</tr>
</tbody>
</table>
<table class="template hidden">
<tbody data-add-form="#restricted-applications-grid">
<tr data-add-form-element="clone">
<td data-title="No:">
<span class="index"></span>
</td>
<td data-title="App Name">
<input type="text" class="form-control grid-input-text" data-child-key="appName" maxlength="100" data-default="" placeholder="[ Application Name or Description ]" />
</td>
<td data-title="Package Name">
<input type="text" class="form-control grid-input-text" data-child-key="packageName" maxlength="100" data-default="" placeholder="[ Package Name of Application ]" />
</td>
<td>
<span class="list-group-item-actions">
<a href="#restricted-applications-grid" class="grid-input-remove" data-click-event="remove-form">
<span class="fw-stack helper" title="Remove Entry">
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-delete fw-stack-1x"></i>
</span>
</a>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<!--/app-restriction-->
<!-- wi-fi -->
<!--<div class="wr-hidden-operation" data-operation="wifi">-->
<!--<div class="panel panel-default operation-data" data-operation="wifi" data-operation-code="WIFI">-->
<!--<div id="wifi-heading" class="panel-heading" role="tab">-->
<!--<h2 class="sub-title panel-title">-->
<!--Wi-Fi Settings-->
<!--<label class="wr-input-control switch" data-toggle="collapse" data-target="#wifi-body">-->
<!--<input type="checkbox" />-->
<!--<span class="helper"></span>-->
<!--<span class="text"></span>-->
<!--</label>-->
<!--<hr>-->
<!--<div class="panel-title-description">-->
<!--This configurations can be used to configure Wi-Fi access on an Android device.-->
<!--Once this configuration profile is installed on a device, corresponding users will not be able-->
<!--to modify these settings on their devices.-->
<!--</div>-->
<!--</h2>-->
<!--</div>-->
<!--<div id="wifi-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="wifi-body">-->
<!--&lt;!&ndash;<div class="cloneable">&ndash;&gt;-->
<!--&lt;!&ndash;<a href="#" class="multi-view add enabled">&ndash;&gt;-->
<!--&lt;!&ndash;<span class="icon fw-stack">&ndash;&gt;-->
<!--&lt;!&ndash;<i class="fw fw-add fw-stack-1x"></i>&ndash;&gt;-->
<!--&lt;!&ndash;<i class="fw fw-ring fw-stack-2x"></i>&ndash;&gt;-->
<!--&lt;!&ndash;</span>&ndash;&gt;-->
<!--&lt;!&ndash;</a>&ndash;&gt;-->
<!--&lt;!&ndash;<a href="#" class="multi-view remove disabled">&ndash;&gt;-->
<!--&lt;!&ndash;<span class="icon fw-stack">&ndash;&gt;-->
<!--&lt;!&ndash;<i class="fw fw-minus fw-stack-1x"></i>&ndash;&gt;-->
<!--&lt;!&ndash;<i class="fw fw-ring fw-stack-2x"></i>&ndash;&gt;-->
<!--&lt;!&ndash;</span>&ndash;&gt;-->
<!--&lt;!&ndash;</a>&ndash;&gt;-->
<!--&lt;!&ndash;Wi-Fi Setting :&ndash;&gt;-->
<!--&lt;!&ndash;<br>&ndash;&gt;-->
<!--&lt;!&ndash;<br>&ndash;&gt;-->
<!--Please note that * sign represents required fields of data.-->
<!--<br>-->
<!--<br>-->
<!--<div id="wifi-feature-error-msg" class="alert alert-danger hidden" role="alert">-->
<!--<i class="icon fw fw-error"></i><span></span>-->
<!--</div>-->
<!--<div class="wr-input-control">-->
<!--<label class="wr-input-label" for="wifi-ssid">-->
<!--Service Set Identifier (SSID) *-->
<!--<span class="helper" title="Identification of the wireless network to be configured.">-->
<!--<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>-->
<!--</span>-->
<!--<br>-->
<!--( should be 1-to-30 characters long )-->
<!--</label>-->
<!--<input id="wifi-ssid" type="text" class="form-control operationDataKeys" data-key="wifiSSID" maxlength="100" placeholder="[ Required field ]"/>-->
<!--</div>-->
<!--<div class="wr-input-control">-->
<!--<label class="wr-input-label" for="wifi-password">-->
<!--Password-->
<!--<span class="helper" title="Password for the wireless network.">-->
<!--<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>-->
<!--</span>-->
<!--</label>-->
<!--<input id="wifi-password" type="text" class="form-control operationDataKeys" data-key="wifiPassword" maxlength="100" placeholder="[ Optional field ]"/>-->
<!--</div>-->
<!--&lt;!&ndash;</div>&ndash;&gt;-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!-- /wi-fi -->
<!-- install-applications -->
<!--<div class="wr-hidden-operation" data-operation="install-apps">-->
<!--<div class="panel panel-default operation-data" data-operation="INSTALL_APPLICATION">-->
<!--<div class="panel-heading" role="tab">-->
<!--<h2 class="sub-title panel-title">-->
<!--<br>-->
<!--&nbsp;&nbsp;&nbsp;App Installations-->
<!--<label class="wr-input-control switch" data-toggle="collapse" data-target="#installApp">-->
<!--<input type="checkbox" />-->
<!--<span class="helper"></span>-->
<!--<span class="text"></span>-->
<!--</label>-->
<!--<br>-->
<!--<br>-->
<!--</h2>-->
<!--</div>-->
<!--<div id="installApp" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="installApp">-->
<!--<div id="install-app-feature-error-msg" class="alert alert-danger hidden" role="alert">-->
<!--<i class="icon fw fw-error"></i><span></span>-->
<!--</div>-->
<!--<label class="wr-input-label" title="Application Identifier">App Identifier<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>-->
<!--<div class="wr-input-control">-->
<!--<input type="text" class="form-control operationDataKeys" id="package-name" data-key="packageName" placeholder="Enter App Identifier"/>-->
<!--</div>-->
<!--<div class="wr-input-control">-->
<!--<label class="wr-input-control dropdown">-->
<!--<span class="helper" title="App Type">App Type<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></span>-->
<!--<select class="form-control col-sm-8 operationDataKeys appTypesInput" id="type" data-key="type">-->
<!--<option>Public</option>-->
<!--<option>Enterprise</option>-->
<!--</select>-->
<!--</label>-->
<!--</div>-->
<!--<label class="wr-input-label" title="URL">URL<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>-->
<!--<div class="wr-input-control">-->
<!--<input type="text" class="form-control operationDataKeys" id="url" data-key="url" placeholder="Enter URL"/>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!-- /install-applications -->
<!-- /uninstall-applications -->
<!--<div class="wr-hidden-operation" data-operation="uninstall-apps">-->
<!--<div class="panel panel-default operation-data" data-operation="UNINSTALL_APPLICATION">-->
<!--<div class="panel-heading" role="tab">-->
<!--<h2 class="sub-title panel-title">-->
<!--<br>-->
<!--&nbsp;&nbsp;&nbsp;App Uninstallations-->
<!--<label class="wr-input-control switch" data-toggle="collapse" data-target="#uninstallApp">-->
<!--<input type="checkbox" />-->
<!--<span class="helper"></span>-->
<!--<span class="text"></span>-->
<!--</label>-->
<!--<br>-->
<!--<br>-->
<!--</h2>-->
<!--</div>-->
<!--<div id="uninstallApp" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="uninstallApp">-->
<!--<div id="uninstall-app-feature-error-msg" class="alert alert-danger hidden" role="alert">-->
<!--<i class="icon fw fw-error"></i><span></span>-->
<!--</div>-->
<!--<label class="wr-input-label" title="Application Identifier">App Identifier<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>-->
<!--<!--span>Identification of the wireless network to connect to</span-->
<!--<div class="wr-input-control">-->
<!--<input type="text" class="form-control operationDataKeys" id="package-name" data-key="packageName" placeholder="Enter App Identifier"/>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!-- /uninstall-applications -->
<!-- /web-clips -->
<!--<div class="wr-hidden-operation" data-operation="web-clips">-->
<!--<div class="panel panel-default operation-data" data-operation="WEBCLIP">-->
<!--<div class="panel-heading" role="tab">-->
<!--<h2 class="sub-title panel-title">-->
<!--<br>-->
<!--&nbsp;&nbsp;&nbsp;Web clips-->
<!--<label class="wr-input-control switch" data-toggle="collapse" data-target="#installWebClip">-->
<!--<input type="checkbox" />-->
<!--<span class="helper"></span>-->
<!--<span class="text"></span>-->
<!--</label>-->
<!--<br>-->
<!--<br>-->
<!--</h2>-->
<!--</div>-->
<!--<div id="installWebClip" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="installWebClip">-->
<!--<div id="install-webclip-feature-error-msg" class="alert alert-danger hidden" role="alert">-->
<!--<i class="icon fw fw-error"></i><span></span>-->
<!--</div>-->
<!--<label class="wr-input-label" title="Title of the web clip">Title<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>-->
<!--<div class="wr-input-control">-->
<!--<input type="text" class="form-control operationDataKeys" id="title" data-key="title" placeholder="Enter Title"/>-->
<!--</div>-->
<!--<label class="wr-input-label" title="URL">URL<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>-->
<!--<div class="wr-input-control">-->
<!--<input type="text" class="form-control operationDataKeys" id="url" data-key="url" placeholder="Enter URL"/>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!-- /web-clips -->
</div>
</div>
Loading…
Cancel
Save