mirror of
https://repository.entgra.net/community/device-mgt-plugins.git
synced 2025-09-16 23:42:15 +00:00
Merge branch 'master' of https://github.com/rasika/carbon-device-mgt-plugins into iots-ga
This commit is contained in:
commit
ca952e2e6c
@ -0,0 +1,149 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
~
|
||||||
|
~ Licensed 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.
|
||||||
|
-->
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||||
|
<artifactId>extensions</artifactId>
|
||||||
|
<version>2.2.2-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<version>2.2.2-SNAPSHOT</version>
|
||||||
|
<artifactId>org.wso2.carbon.appmgt.mdm.osgiconnector</artifactId>
|
||||||
|
<packaging>bundle</packaging>
|
||||||
|
<name>WSO2 Carbon - App Manager WSO2 MDM OSGI Connector Component</name>
|
||||||
|
<url>http://maven.apache.org</url>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-scr-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>generate-scr-scrdescriptor</id>
|
||||||
|
<goals>
|
||||||
|
<goal>scr</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-bundle-plugin</artifactId>
|
||||||
|
<extensions>true</extensions>
|
||||||
|
<configuration>
|
||||||
|
<instructions>
|
||||||
|
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
|
||||||
|
<Bundle-Name>${project.artifactId}</Bundle-Name>
|
||||||
|
<Private-Package>org.wso2.carbon.appmgt.mdm.osgiconnector.internal</Private-Package>
|
||||||
|
<Import-Package>
|
||||||
|
org.wso2.carbon.device.mgt.core.*,
|
||||||
|
org.wso2.carbon.appmgt.mobile.utils.*,
|
||||||
|
org.wso2.carbon.appmgt.mobile.mdm.*,
|
||||||
|
org.wso2.carbon.appmgt.mobile.interfaces.*,
|
||||||
|
*;resolution:=optional
|
||||||
|
</Import-Package>
|
||||||
|
<Export-Package>
|
||||||
|
!org.wso2.carbon.appmgt.mdm.osgiconnector.internal,
|
||||||
|
org.wso2.carbon.appmgt.mdm.osgiconnector.*
|
||||||
|
</Export-Package>
|
||||||
|
</instructions>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.appmgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.appmgt.mobile</artifactId>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||||
|
<artifactId>axiom-api</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||||
|
<artifactId>axiom-impl</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.device.mgt.core</artifactId>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||||
|
<artifactId>axiom-api</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||||
|
<artifactId>axiom-impl</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.policy.mgt.core</artifactId>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||||
|
<artifactId>axiom-api</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||||
|
<artifactId>axiom-impl</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.device.mgt.common</artifactId>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||||
|
<artifactId>axiom-api</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||||
|
<artifactId>axiom-impl</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-io.wso2</groupId>
|
||||||
|
<artifactId>commons-io</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.googlecode.json-simple.wso2</groupId>
|
||||||
|
<artifactId>json-simple</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.googlecode.plist</groupId>
|
||||||
|
<artifactId>dd-plist</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>org.apache.felix.scr</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.gson</groupId>
|
||||||
|
<artifactId>gson</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
||||||
@ -0,0 +1,296 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.appmgt.mdm.osgiconnector;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.beans.MobileApp;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.beans.MobileAppTypes;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.common.DeviceApplicationException;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.util.AndroidApplicationOperationUtil;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.util.IOSApplicationOperationUtil;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.util.MDMAppConstants;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.util.MDMServiceAPIUtils;
|
||||||
|
import org.wso2.carbon.appmgt.mobile.beans.ApplicationOperationAction;
|
||||||
|
import org.wso2.carbon.appmgt.mobile.beans.ApplicationOperationDevice;
|
||||||
|
import org.wso2.carbon.appmgt.mobile.interfaces.ApplicationOperations;
|
||||||
|
import org.wso2.carbon.appmgt.mobile.mdm.App;
|
||||||
|
import org.wso2.carbon.appmgt.mobile.mdm.Device;
|
||||||
|
import org.wso2.carbon.appmgt.mobile.utils.MobileApplicationException;
|
||||||
|
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||||
|
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||||
|
import org.wso2.carbon.device.mgt.common.Platform;
|
||||||
|
import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManagementException;
|
||||||
|
import org.wso2.carbon.device.mgt.common.operation.mgt.Activity;
|
||||||
|
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
public class ApplicationOperationsImpl implements ApplicationOperations {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(ApplicationOperationsImpl.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param applicationOperationAction holds the information needs to perform an action on mdm.
|
||||||
|
* @throws MobileApplicationException
|
||||||
|
*/
|
||||||
|
public String performAction(ApplicationOperationAction applicationOperationAction)
|
||||||
|
throws MobileApplicationException {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug(applicationOperationAction.getAction() + " action is triggered for " +
|
||||||
|
applicationOperationAction.getType() +".");
|
||||||
|
}
|
||||||
|
|
||||||
|
Operation operation = null;
|
||||||
|
List<DeviceIdentifier> deviceIdentifiers = new ArrayList<>();
|
||||||
|
List<org.wso2.carbon.device.mgt.common.Device> deviceList;
|
||||||
|
if (MDMAppConstants.USER.equals(applicationOperationAction.getType())) {
|
||||||
|
String userName = null;
|
||||||
|
try {
|
||||||
|
for (String param : applicationOperationAction.getParams()) {
|
||||||
|
userName = param;
|
||||||
|
|
||||||
|
deviceList = MDMServiceAPIUtils
|
||||||
|
.getDeviceManagementService(applicationOperationAction.getTenantId()).
|
||||||
|
getDevicesOfUser(userName);
|
||||||
|
|
||||||
|
for (org.wso2.carbon.device.mgt.common.Device device : deviceList) {
|
||||||
|
if(applicationOperationAction.getApp().getPlatform().equalsIgnoreCase(device.getType())){
|
||||||
|
deviceIdentifiers.add(getDeviceIdentifierByDevice(device));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (DeviceManagementException devEx) {
|
||||||
|
String errorMsg = "Error occurred fetch device for user " + userName +
|
||||||
|
" at app installation";
|
||||||
|
logError(errorMsg, devEx);
|
||||||
|
throw new MobileApplicationException(errorMsg, devEx);
|
||||||
|
}
|
||||||
|
} else if (MDMAppConstants.ROLE.equals(applicationOperationAction.getType())) {
|
||||||
|
String userRole = null;
|
||||||
|
try {
|
||||||
|
for (String param : applicationOperationAction.getParams()) {
|
||||||
|
userRole = param;
|
||||||
|
|
||||||
|
deviceList = MDMServiceAPIUtils
|
||||||
|
.getDeviceManagementService(applicationOperationAction.getTenantId()).
|
||||||
|
getAllDevicesOfRole(userRole);
|
||||||
|
|
||||||
|
for (org.wso2.carbon.device.mgt.common.Device device : deviceList) {
|
||||||
|
deviceIdentifiers.add(getDeviceIdentifierByDevice(device));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (DeviceManagementException devMgtEx) {
|
||||||
|
String errorMsg = "Error occurred fetch device for user role " + userRole +
|
||||||
|
" at app installation";
|
||||||
|
logError(errorMsg, devMgtEx);
|
||||||
|
throw new MobileApplicationException(errorMsg, devMgtEx);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (MDMAppConstants.DEVICE.equals(applicationOperationAction.getType())) {
|
||||||
|
DeviceIdentifier deviceIdentifier;
|
||||||
|
for (String param : applicationOperationAction.getParams()) {
|
||||||
|
deviceIdentifier = new DeviceIdentifier();
|
||||||
|
if (isValidJSON(param)) {
|
||||||
|
JSONParser parser = new JSONParser();
|
||||||
|
try {
|
||||||
|
JSONObject parsedObj = (JSONObject) parser.parse(param);
|
||||||
|
deviceIdentifier.setId((String) parsedObj.get(MDMAppConstants.ID));
|
||||||
|
deviceIdentifier.setType((String) parsedObj.get(MDMAppConstants.TYPE));
|
||||||
|
deviceIdentifiers.add(deviceIdentifier);
|
||||||
|
} catch (ParseException e) {
|
||||||
|
logError("Device Identifier is not valid json object.", e);
|
||||||
|
throw new MobileApplicationException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new IllegalStateException("invalid type is received from app store.");
|
||||||
|
}
|
||||||
|
App app = applicationOperationAction.getApp();
|
||||||
|
MobileApp mobileApp = new MobileApp();
|
||||||
|
mobileApp.setId(app.getId());
|
||||||
|
mobileApp.setType(MobileAppTypes.valueOf(app.getType().toUpperCase()));
|
||||||
|
mobileApp.setAppIdentifier(app.getAppIdentifier());
|
||||||
|
mobileApp.setIconImage(app.getIconImage());
|
||||||
|
mobileApp.setIdentifier(app.getIdentifier());
|
||||||
|
mobileApp.setLocation(app.getLocation());
|
||||||
|
mobileApp.setName(app.getName());
|
||||||
|
mobileApp.setPackageName(app.getPackageName());
|
||||||
|
mobileApp.setPlatform(app.getPlatform());
|
||||||
|
mobileApp.setVersion(app.getVersion());
|
||||||
|
Properties properties = new Properties();
|
||||||
|
|
||||||
|
if (MDMAppConstants.IOS.equals(app.getPlatform())) {
|
||||||
|
if (MDMAppConstants.ENTERPRISE.equals(app.getType())) {
|
||||||
|
properties.put(MDMAppConstants.IOSConstants.IS_REMOVE_APP, true);
|
||||||
|
properties.put(MDMAppConstants.IOSConstants.IS_PREVENT_BACKUP, true);
|
||||||
|
} else if (MDMAppConstants.IOSConstants.PUBLIC.equals(app.getType())) {
|
||||||
|
properties.put(MDMAppConstants.IOSConstants.I_TUNES_ID, app.getIdentifier());
|
||||||
|
properties.put(MDMAppConstants.IOSConstants.IS_REMOVE_APP, true);
|
||||||
|
properties.put(MDMAppConstants.IOSConstants.IS_PREVENT_BACKUP, true);
|
||||||
|
} else if (MDMAppConstants.WEBAPP.equals(app.getType())) {
|
||||||
|
properties.put(MDMAppConstants.IOSConstants.LABEL, app.getName());
|
||||||
|
properties.put(MDMAppConstants.IOSConstants.IS_REMOVE_APP, true);
|
||||||
|
}
|
||||||
|
} else if (MDMAppConstants.WEBAPP.equals(app.getPlatform())) {
|
||||||
|
properties.put(MDMAppConstants.IOSConstants.LABEL, app.getName());
|
||||||
|
properties.put(MDMAppConstants.IOSConstants.IS_REMOVE_APP, true);
|
||||||
|
}
|
||||||
|
mobileApp.setProperties(properties);
|
||||||
|
Activity activity = null;
|
||||||
|
try {
|
||||||
|
if (deviceIdentifiers.size() > 0) {
|
||||||
|
if (deviceIdentifiers.get(0).getType().equalsIgnoreCase(Platform.ANDROID.toString())) {
|
||||||
|
if (MDMAppConstants.INSTALL.equals(applicationOperationAction.getAction())) {
|
||||||
|
operation = AndroidApplicationOperationUtil
|
||||||
|
.createInstallAppOperation(mobileApp, applicationOperationAction.getSchedule());
|
||||||
|
} else if (MDMAppConstants.UPDATE.equals(applicationOperationAction.getAction())) {
|
||||||
|
operation = AndroidApplicationOperationUtil
|
||||||
|
.createUpdateAppOperation(mobileApp, applicationOperationAction.getSchedule());
|
||||||
|
} else {
|
||||||
|
operation = AndroidApplicationOperationUtil
|
||||||
|
.createAppUninstallOperation(mobileApp, applicationOperationAction.getSchedule());
|
||||||
|
}
|
||||||
|
} else if (deviceIdentifiers.get(0).getType().equalsIgnoreCase(Platform.IOS.toString())) {
|
||||||
|
if (MDMAppConstants.INSTALL.equals(applicationOperationAction.getAction())) {
|
||||||
|
operation =
|
||||||
|
IOSApplicationOperationUtil.createInstallAppOperation(mobileApp);
|
||||||
|
} else {
|
||||||
|
operation =
|
||||||
|
IOSApplicationOperationUtil.createAppUninstallOperation(mobileApp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
activity = MDMServiceAPIUtils.getAppManagementService(applicationOperationAction.getTenantId())
|
||||||
|
.installApplicationForDevices(operation, deviceIdentifiers);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(activity != null){
|
||||||
|
return activity.getActivityId();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
|
||||||
|
} catch (DeviceApplicationException mdmExce) {
|
||||||
|
logError("Error in creating operation object using app.", mdmExce);
|
||||||
|
throw new MobileApplicationException(mdmExce.getMessage());
|
||||||
|
} catch (ApplicationManagementException appMgtExce) {
|
||||||
|
logError("Error in app installation.", appMgtExce);
|
||||||
|
throw new MobileApplicationException(appMgtExce.getErrorMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new device identifier from Device object.
|
||||||
|
* @param device device which is to be retrieved type and id
|
||||||
|
* @return created device identifier
|
||||||
|
*/
|
||||||
|
private static DeviceIdentifier getDeviceIdentifierByDevice(
|
||||||
|
org.wso2.carbon.device.mgt.common.Device device) {
|
||||||
|
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||||
|
deviceIdentifier.setId(device.getDeviceIdentifier());
|
||||||
|
deviceIdentifier.setType(device.getType());
|
||||||
|
|
||||||
|
return deviceIdentifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param applicationOperationDevice holds the information needs to retrieve device list.
|
||||||
|
* @return List of devices
|
||||||
|
* @throws MobileApplicationException
|
||||||
|
*/
|
||||||
|
public List<Device> getDevices(ApplicationOperationDevice applicationOperationDevice)
|
||||||
|
throws MobileApplicationException {
|
||||||
|
|
||||||
|
List<Device> devices;
|
||||||
|
try {
|
||||||
|
List<org.wso2.carbon.device.mgt.common.Device> deviceList = MDMServiceAPIUtils
|
||||||
|
.getDeviceManagementService(applicationOperationDevice.getTenantId()).
|
||||||
|
getDevicesOfUser(
|
||||||
|
applicationOperationDevice.getCurrentUser().getUsername());
|
||||||
|
devices = new ArrayList<>(deviceList.size());
|
||||||
|
if(log.isDebugEnabled()){
|
||||||
|
log.debug("device list got from mdm "+ deviceList.toString());
|
||||||
|
}
|
||||||
|
for (org.wso2.carbon.device.mgt.common.Device commonDevice : deviceList) {
|
||||||
|
if (MDMAppConstants.ACTIVE
|
||||||
|
.equals(commonDevice.getEnrolmentInfo().getStatus().toString().
|
||||||
|
toLowerCase())) {
|
||||||
|
Device device = new Device();
|
||||||
|
org.wso2.carbon.appmgt.mobile.beans.DeviceIdentifier deviceIdentifier =
|
||||||
|
new org.wso2.carbon.appmgt.mobile.beans.DeviceIdentifier();
|
||||||
|
deviceIdentifier.setId(commonDevice.getDeviceIdentifier());
|
||||||
|
deviceIdentifier.setType(commonDevice.getType());
|
||||||
|
device.setDeviceIdentifier(deviceIdentifier);
|
||||||
|
device.setName(commonDevice.getName());
|
||||||
|
device.setModel(commonDevice.getName());
|
||||||
|
device.setType(MDMAppConstants.MOBILE_DEVICE);
|
||||||
|
String imgUrl;
|
||||||
|
if (MDMAppConstants.ANDROID.equalsIgnoreCase(commonDevice.getType())) {
|
||||||
|
imgUrl = String.format(applicationOperationDevice.getConfigParams()
|
||||||
|
.get(MDMAppConstants.IMAGE_URL),
|
||||||
|
MDMAppConstants.NEXUS);
|
||||||
|
} else if (MDMAppConstants.IOS.equalsIgnoreCase(commonDevice.getType())) {
|
||||||
|
imgUrl = String.format(applicationOperationDevice.getConfigParams()
|
||||||
|
.get(MDMAppConstants.IMAGE_URL),
|
||||||
|
MDMAppConstants.IPHONE);
|
||||||
|
} else {
|
||||||
|
imgUrl = String.format(applicationOperationDevice.getConfigParams()
|
||||||
|
.get(MDMAppConstants.IMAGE_URL),
|
||||||
|
MDMAppConstants.NONE);
|
||||||
|
}
|
||||||
|
device.setImage(imgUrl);
|
||||||
|
device.setPlatform(commonDevice.getType());
|
||||||
|
devices.add(device);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (DeviceManagementException e) {
|
||||||
|
logError("Error While retrieving Device List.", e);
|
||||||
|
throw new MobileApplicationException(e.getMessage());
|
||||||
|
|
||||||
|
}
|
||||||
|
return devices;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isValidJSON(String json) {
|
||||||
|
JSONParser parser = new JSONParser();
|
||||||
|
try {
|
||||||
|
parser.parse(json);
|
||||||
|
} catch (ParseException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void logError(String errorMessage, Throwable e) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.error(errorMessage, e);
|
||||||
|
} else {
|
||||||
|
log.error(errorMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.appmgt.mdm.osgiconnector.internal;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.osgi.framework.BundleContext;
|
||||||
|
import org.osgi.framework.ServiceRegistration;
|
||||||
|
import org.osgi.service.component.ComponentContext;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.ApplicationOperationsImpl;
|
||||||
|
import org.wso2.carbon.appmgt.mobile.interfaces.ApplicationOperations;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @scr.component name="org.wso2.carbon.appmgt.mdm.osgiconnector" immediate="true"
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class DeviceApplicationServiceComponent {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(DeviceApplicationServiceComponent.class);
|
||||||
|
|
||||||
|
private ServiceRegistration mdmServiceRegistration;
|
||||||
|
|
||||||
|
protected void activate(ComponentContext context) {
|
||||||
|
BundleContext bundleContext = context.getBundleContext();
|
||||||
|
mdmServiceRegistration = bundleContext
|
||||||
|
.registerService(ApplicationOperations.class.getName(), new ApplicationOperationsImpl(), null);
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Device Application Service Component activated.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void deactivate(ComponentContext context) {
|
||||||
|
if (mdmServiceRegistration != null) {
|
||||||
|
mdmServiceRegistration.unregister();
|
||||||
|
mdmServiceRegistration = null;
|
||||||
|
}
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Device Application Service Component deactivated.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,126 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.appmgt.mdm.osgiconnector.mdmmgt.beans;
|
||||||
|
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents the generic mobile Application information
|
||||||
|
* which is used by AppM.
|
||||||
|
*/
|
||||||
|
public class MobileApp {
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
private String name;
|
||||||
|
private MobileAppTypes type;
|
||||||
|
private String platform;
|
||||||
|
private String version;
|
||||||
|
private String identifier;
|
||||||
|
private String iconImage;
|
||||||
|
private String packageName;
|
||||||
|
private String appIdentifier;
|
||||||
|
private String location;
|
||||||
|
private Properties properties;
|
||||||
|
|
||||||
|
public MobileAppTypes getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(MobileAppTypes type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPlatform() {
|
||||||
|
return platform;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPlatform(String platform) {
|
||||||
|
this.platform = platform;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getVersion() {
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVersion(String version) {
|
||||||
|
this.version = version;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIdentifier() {
|
||||||
|
return identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIdentifier(String identifier) {
|
||||||
|
this.identifier = identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIconImage() {
|
||||||
|
return iconImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIconImage(String iconImage) {
|
||||||
|
this.iconImage = iconImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPackageName() {
|
||||||
|
return packageName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPackageName(String packageName) {
|
||||||
|
this.packageName = packageName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAppIdentifier() {
|
||||||
|
return appIdentifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAppIdentifier(String appIdentifier) {
|
||||||
|
this.appIdentifier = appIdentifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLocation() {
|
||||||
|
return location;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLocation(String location) {
|
||||||
|
this.location = location;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Properties getProperties() {
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProperties(Properties properties) {
|
||||||
|
this.properties = properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.appmgt.mdm.osgiconnector.mdmmgt.beans;
|
||||||
|
|
||||||
|
public enum MobileAppTypes {
|
||||||
|
ENTERPRISE, WEBAPP, PUBLIC
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.appmgt.mdm.osgiconnector.mdmmgt.beans.android;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.common.DeviceApplicationException;
|
||||||
|
|
||||||
|
public class AndroidApplication {
|
||||||
|
private String type;
|
||||||
|
private String appIdentifier;
|
||||||
|
|
||||||
|
public String getAppIdentifier() {
|
||||||
|
return appIdentifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAppIdentifier(String appIdentifier) {
|
||||||
|
this.appIdentifier = appIdentifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(String type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toJSON() throws DeviceApplicationException {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
return gson.toJson(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.appmgt.mdm.osgiconnector.mdmmgt.beans.android;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.common.DeviceApplicationException;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents the Appstore Application information.
|
||||||
|
*/
|
||||||
|
public class AppStoreApplication extends AndroidApplication implements Serializable {
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.appmgt.mdm.osgiconnector.mdmmgt.beans.android;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.common.DeviceApplicationException;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents the Enterprise Application information.
|
||||||
|
*/
|
||||||
|
public class EnterpriseApplication extends AndroidApplication implements Serializable {
|
||||||
|
|
||||||
|
private String url;
|
||||||
|
private String schedule;
|
||||||
|
private String packageName;
|
||||||
|
|
||||||
|
public String getSchedule() {
|
||||||
|
return schedule;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSchedule(String schedule) {
|
||||||
|
this.schedule = schedule;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUrl() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUrl(String url) {
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPackageName() {
|
||||||
|
return packageName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPackageName(String packageName) {
|
||||||
|
this.packageName = packageName;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.appmgt.mdm.osgiconnector.mdmmgt.beans.android;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.common.DeviceApplicationException;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents the Web Application information.
|
||||||
|
*/
|
||||||
|
public class WebApplication implements Serializable {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
private String url;
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUrl() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUrl(String url) {
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(String type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toJSON() throws DeviceApplicationException {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
return gson.toJson(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* 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.appmgt.mdm.osgiconnector.mdmmgt.beans.ios;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class AppStoreApplication extends IOSApplication implements Serializable {
|
||||||
|
|
||||||
|
private int iTunesStoreID;
|
||||||
|
|
||||||
|
public int getiTunesStoreID() {
|
||||||
|
return iTunesStoreID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setiTunesStoreID(int iTunesStoreID) {
|
||||||
|
this.iTunesStoreID = iTunesStoreID;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* 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.appmgt.mdm.osgiconnector.mdmmgt.beans.ios;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class EnterpriseApplication extends IOSApplication implements Serializable {
|
||||||
|
|
||||||
|
private String manifestURL;
|
||||||
|
|
||||||
|
public String getManifestURL() {
|
||||||
|
return manifestURL;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setManifestURL(String manifestURL) {
|
||||||
|
this.manifestURL = manifestURL;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.appmgt.mdm.osgiconnector.mdmmgt.beans.ios;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.common.DeviceApplicationException;
|
||||||
|
|
||||||
|
public class IOSApplication {
|
||||||
|
|
||||||
|
private String identifier;
|
||||||
|
private boolean removeAppUponMDMProfileRemoval;
|
||||||
|
private boolean preventBackupOfAppData;
|
||||||
|
private String bundleId;
|
||||||
|
private String UUID;
|
||||||
|
|
||||||
|
public String getUUID() {
|
||||||
|
return UUID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUUID(String UUID) {
|
||||||
|
this.UUID = UUID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIdentifier() {
|
||||||
|
return identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIdentifier(String identifier) {
|
||||||
|
this.identifier = identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRemoveAppUponMDMProfileRemoval() {
|
||||||
|
return removeAppUponMDMProfileRemoval;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRemoveAppUponMDMProfileRemoval(boolean removeAppUponMDMProfileRemoval) {
|
||||||
|
this.removeAppUponMDMProfileRemoval = removeAppUponMDMProfileRemoval;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPreventBackupOfAppData() {
|
||||||
|
return preventBackupOfAppData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPreventBackupOfAppData(boolean preventBackupOfAppData) {
|
||||||
|
this.preventBackupOfAppData = preventBackupOfAppData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBundleId() {
|
||||||
|
return bundleId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBundleId(String bundleId) {
|
||||||
|
this.bundleId = bundleId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toJSON() throws DeviceApplicationException {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
return gson.toJson(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.appmgt.mdm.osgiconnector.mdmmgt.beans.ios;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.common.DeviceApplicationException;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class RemoveApplication implements Serializable {
|
||||||
|
|
||||||
|
private String bundleId;
|
||||||
|
|
||||||
|
public String getBundleId() {
|
||||||
|
return bundleId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBundleId(String bundleId) {
|
||||||
|
this.bundleId = bundleId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toJSON() throws DeviceApplicationException {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
return gson.toJson(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.appmgt.mdm.osgiconnector.mdmmgt.beans.ios;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.common.DeviceApplicationException;
|
||||||
|
|
||||||
|
public class WebClip {
|
||||||
|
|
||||||
|
private String URL;
|
||||||
|
private String label;
|
||||||
|
private String icon;
|
||||||
|
private String isRemovable;
|
||||||
|
private String UUID;
|
||||||
|
|
||||||
|
public String getUUID() {
|
||||||
|
return UUID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUUID(String UUID) {
|
||||||
|
this.UUID = UUID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getURL() {
|
||||||
|
return URL;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setURL(String URL) {
|
||||||
|
this.URL = URL;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLabel() {
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLabel(String label) {
|
||||||
|
this.label = label;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIcon() {
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIcon(String icon) {
|
||||||
|
this.icon = icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIsRemovable() {
|
||||||
|
return isRemovable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIsRemovable(String isRemovable) {
|
||||||
|
this.isRemovable = isRemovable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toJSON() throws DeviceApplicationException {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
return gson.toJson(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.appmgt.mdm.osgiconnector.mdmmgt.common;
|
||||||
|
|
||||||
|
public class DeviceApplicationException extends Exception {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 5136875495185597926L;
|
||||||
|
private String errorMessage;
|
||||||
|
|
||||||
|
public DeviceApplicationException(String msg, Exception e) {
|
||||||
|
super(msg, e);
|
||||||
|
setErrorMessage(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DeviceApplicationException(String msg, Throwable cause) {
|
||||||
|
super(msg, cause);
|
||||||
|
setErrorMessage(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DeviceApplicationException(String msg) {
|
||||||
|
super(msg);
|
||||||
|
setErrorMessage(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DeviceApplicationException() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public DeviceApplicationException(Throwable cause) {
|
||||||
|
super(cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setErrorMessage(String errorMessage) {
|
||||||
|
this.errorMessage = errorMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.appmgt.mdm.osgiconnector.mdmmgt.util;
|
||||||
|
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.beans.MobileApp;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.beans.android.AppStoreApplication;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.beans.android.EnterpriseApplication;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.beans.android.WebApplication;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.common.DeviceApplicationException;
|
||||||
|
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
||||||
|
import org.wso2.carbon.device.mgt.core.operation.mgt.ProfileOperation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class contains the all the operations related to Android.
|
||||||
|
*/
|
||||||
|
public class AndroidApplicationOperationUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create Install Application operation.
|
||||||
|
*
|
||||||
|
* @param application MobileApp application
|
||||||
|
* @return operation
|
||||||
|
* @throws DeviceApplicationException
|
||||||
|
*/
|
||||||
|
public static Operation createInstallAppOperation(MobileApp application, String schedule) throws
|
||||||
|
DeviceApplicationException {
|
||||||
|
|
||||||
|
ProfileOperation operation = new ProfileOperation();
|
||||||
|
operation.setCode(MDMAppConstants.AndroidConstants.OPCODE_INSTALL_APPLICATION);
|
||||||
|
operation.setType(Operation.Type.PROFILE);
|
||||||
|
switch (application.getType()) {
|
||||||
|
case ENTERPRISE:
|
||||||
|
EnterpriseApplication enterpriseApplication = new EnterpriseApplication();
|
||||||
|
enterpriseApplication.setType(application.getType().toString());
|
||||||
|
enterpriseApplication.setUrl(application.getLocation());
|
||||||
|
enterpriseApplication.setSchedule(schedule);
|
||||||
|
enterpriseApplication.setPackageName(application.getPackageName());
|
||||||
|
operation.setPayLoad(enterpriseApplication.toJSON());
|
||||||
|
break;
|
||||||
|
case PUBLIC:
|
||||||
|
setOperationForPublicApp(operation, application);
|
||||||
|
break;
|
||||||
|
case WEBAPP:
|
||||||
|
setOperationForWebApp(operation, application);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
String errorMessage = "Invalid application type.";
|
||||||
|
throw new DeviceApplicationException(errorMessage);
|
||||||
|
}
|
||||||
|
return operation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create Update Application operation.
|
||||||
|
*
|
||||||
|
* @param application MobileApp application
|
||||||
|
* @return operation
|
||||||
|
* @throws DeviceApplicationException
|
||||||
|
*/
|
||||||
|
public static Operation createUpdateAppOperation(MobileApp application, String schedule) throws
|
||||||
|
DeviceApplicationException {
|
||||||
|
|
||||||
|
ProfileOperation operation = new ProfileOperation();
|
||||||
|
operation.setCode(MDMAppConstants.AndroidConstants.OPCODE_UPDATE_APPLICATION);
|
||||||
|
operation.setType(Operation.Type.PROFILE);
|
||||||
|
switch (application.getType()) {
|
||||||
|
case ENTERPRISE:
|
||||||
|
EnterpriseApplication enterpriseApplication = new EnterpriseApplication();
|
||||||
|
enterpriseApplication.setType(application.getType().toString());
|
||||||
|
enterpriseApplication.setUrl(application.getLocation());
|
||||||
|
enterpriseApplication.setSchedule(schedule);
|
||||||
|
operation.setPayLoad(enterpriseApplication.toJSON());
|
||||||
|
break;
|
||||||
|
case PUBLIC:
|
||||||
|
setOperationForPublicApp(operation, application);
|
||||||
|
break;
|
||||||
|
case WEBAPP:
|
||||||
|
setOperationForWebApp(operation, application);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
String errorMessage = "Invalid application type.";
|
||||||
|
throw new DeviceApplicationException(errorMessage);
|
||||||
|
}
|
||||||
|
return operation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create Uninstall Application operation.
|
||||||
|
*
|
||||||
|
* @param application MobileApp application
|
||||||
|
* @return operation
|
||||||
|
* @throws DeviceApplicationException
|
||||||
|
*/
|
||||||
|
public static Operation createAppUninstallOperation(MobileApp application, String schedule) throws
|
||||||
|
DeviceApplicationException {
|
||||||
|
|
||||||
|
ProfileOperation operation = new ProfileOperation();
|
||||||
|
operation.setCode(MDMAppConstants.AndroidConstants.OPCODE_UNINSTALL_APPLICATION);
|
||||||
|
operation.setType(Operation.Type.PROFILE);
|
||||||
|
|
||||||
|
switch (application.getType()) {
|
||||||
|
case ENTERPRISE:
|
||||||
|
EnterpriseApplication enterpriseApplication = new EnterpriseApplication();
|
||||||
|
enterpriseApplication.setType(application.getType().toString());
|
||||||
|
enterpriseApplication.setAppIdentifier(application.getIdentifier());
|
||||||
|
enterpriseApplication.setSchedule(schedule);
|
||||||
|
operation.setPayLoad(enterpriseApplication.toJSON());
|
||||||
|
break;
|
||||||
|
case PUBLIC:
|
||||||
|
setOperationForPublicApp(operation, application);
|
||||||
|
break;
|
||||||
|
case WEBAPP:
|
||||||
|
setOperationForWebApp(operation, application);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
String errorMessage = "Invalid application type.";
|
||||||
|
throw new DeviceApplicationException(errorMessage);
|
||||||
|
}
|
||||||
|
return operation;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void setOperationForPublicApp(Operation operation, MobileApp application)
|
||||||
|
throws DeviceApplicationException {
|
||||||
|
AppStoreApplication appStoreApplication = new AppStoreApplication();
|
||||||
|
appStoreApplication.setType(application.getType().toString());
|
||||||
|
appStoreApplication.setAppIdentifier(application.getIdentifier());
|
||||||
|
operation.setPayLoad(appStoreApplication.toJSON());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void setOperationForWebApp(Operation operation, MobileApp application)
|
||||||
|
throws DeviceApplicationException {
|
||||||
|
WebApplication webApplication = new WebApplication();
|
||||||
|
webApplication.setUrl(application.getLocation());
|
||||||
|
webApplication.setName(application.getName());
|
||||||
|
webApplication.setType(application.getType().toString());
|
||||||
|
operation.setPayLoad(webApplication.toJSON());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,114 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.appmgt.mdm.osgiconnector.mdmmgt.util;
|
||||||
|
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.beans.MobileApp;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.beans.ios.AppStoreApplication;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.beans.ios.WebClip;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.common.DeviceApplicationException;
|
||||||
|
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
||||||
|
import org.wso2.carbon.device.mgt.core.operation.mgt.ProfileOperation;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.beans.ios.EnterpriseApplication;
|
||||||
|
import org.wso2.carbon.appmgt.mdm.osgiconnector.mdmmgt.beans.ios.RemoveApplication;
|
||||||
|
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class contains the all the operations related to IOS.
|
||||||
|
*/
|
||||||
|
public class IOSApplicationOperationUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create Install Application operation.
|
||||||
|
*
|
||||||
|
* @param application MobileApp application
|
||||||
|
* @return operation
|
||||||
|
* @throws DeviceApplicationException
|
||||||
|
*/
|
||||||
|
public static Operation createInstallAppOperation(MobileApp application) throws
|
||||||
|
DeviceApplicationException {
|
||||||
|
|
||||||
|
ProfileOperation operation = new ProfileOperation();
|
||||||
|
switch (application.getType()) {
|
||||||
|
case ENTERPRISE:
|
||||||
|
EnterpriseApplication enterpriseApplication = new EnterpriseApplication();
|
||||||
|
enterpriseApplication.setBundleId(application.getId());
|
||||||
|
enterpriseApplication.setIdentifier(application.getIdentifier());
|
||||||
|
enterpriseApplication.setManifestURL(application.getLocation());
|
||||||
|
|
||||||
|
Properties properties = application.getProperties();
|
||||||
|
enterpriseApplication.setPreventBackupOfAppData(
|
||||||
|
(Boolean) properties.get(MDMAppConstants.IOSConstants.IS_PREVENT_BACKUP));
|
||||||
|
enterpriseApplication.setRemoveAppUponMDMProfileRemoval(
|
||||||
|
(Boolean) properties.get(MDMAppConstants.IOSConstants.IS_REMOVE_APP));
|
||||||
|
operation.setCode(
|
||||||
|
MDMAppConstants.IOSConstants.OPCODE_INSTALL_ENTERPRISE_APPLICATION);
|
||||||
|
operation.setPayLoad(enterpriseApplication.toJSON());
|
||||||
|
operation.setType(Operation.Type.COMMAND);
|
||||||
|
break;
|
||||||
|
case PUBLIC:
|
||||||
|
AppStoreApplication appStoreApplication = new AppStoreApplication();
|
||||||
|
appStoreApplication.setRemoveAppUponMDMProfileRemoval(
|
||||||
|
(Boolean) application.getProperties()
|
||||||
|
.get(MDMAppConstants.IOSConstants.IS_REMOVE_APP));
|
||||||
|
appStoreApplication.setIdentifier(application.getIdentifier());
|
||||||
|
appStoreApplication.setPreventBackupOfAppData((Boolean) application.getProperties().
|
||||||
|
get(MDMAppConstants.IOSConstants.IS_PREVENT_BACKUP));
|
||||||
|
appStoreApplication.setBundleId(application.getId());
|
||||||
|
appStoreApplication.setiTunesStoreID((Integer) application.getProperties().
|
||||||
|
get(MDMAppConstants.IOSConstants.I_TUNES_ID));
|
||||||
|
operation.setCode(MDMAppConstants.IOSConstants.OPCODE_INSTALL_STORE_APPLICATION);
|
||||||
|
operation.setType(Operation.Type.COMMAND);
|
||||||
|
operation.setPayLoad(appStoreApplication.toJSON());
|
||||||
|
break;
|
||||||
|
case WEBAPP:
|
||||||
|
WebClip webClip = new WebClip();
|
||||||
|
webClip.setIcon(application.getIconImage());
|
||||||
|
webClip.setIsRemovable(application.getProperties().
|
||||||
|
getProperty(MDMAppConstants.IOSConstants.IS_REMOVE_APP));
|
||||||
|
webClip.setLabel(application.getProperties().
|
||||||
|
getProperty(MDMAppConstants.IOSConstants.LABEL));
|
||||||
|
webClip.setURL(application.getLocation());
|
||||||
|
operation.setCode(MDMAppConstants.IOSConstants.OPCODE_INSTALL_WEB_APPLICATION);
|
||||||
|
operation.setType(Operation.Type.PROFILE);
|
||||||
|
operation.setPayLoad(webClip.toJSON());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
String errorMessage = "Invalid application type.";
|
||||||
|
throw new DeviceApplicationException(errorMessage);
|
||||||
|
}
|
||||||
|
return operation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create uninstall operations.
|
||||||
|
*
|
||||||
|
* @param application
|
||||||
|
* @return Uninstall operation
|
||||||
|
* @throws DeviceApplicationException
|
||||||
|
*/
|
||||||
|
public static Operation createAppUninstallOperation(MobileApp application) throws
|
||||||
|
DeviceApplicationException {
|
||||||
|
ProfileOperation operation = new ProfileOperation();
|
||||||
|
operation.setCode(MDMAppConstants.IOSConstants.OPCODE_REMOVE_APPLICATION);
|
||||||
|
operation.setType(Operation.Type.PROFILE);
|
||||||
|
RemoveApplication removeApplication = new RemoveApplication();
|
||||||
|
removeApplication.setBundleId(application.getIdentifier());
|
||||||
|
operation.setPayLoad(removeApplication.toJSON());
|
||||||
|
return operation;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,82 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.appmgt.mdm.osgiconnector.mdmmgt.util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class holds all the constants used for IOS and Android.
|
||||||
|
*/
|
||||||
|
public class MDMAppConstants {
|
||||||
|
|
||||||
|
public static final String USER = "user";
|
||||||
|
public static final String ROLE = "role";
|
||||||
|
public static final String IOS = "ios";
|
||||||
|
public static final String ANDROID = "android";
|
||||||
|
public static final String WEBAPP = "webapp";
|
||||||
|
public static final String INSTALL = "install";
|
||||||
|
public static final String UPDATE = "update";
|
||||||
|
public static final String ACTIVE = "active";
|
||||||
|
public static final String ENTERPRISE = "enterprise";
|
||||||
|
public static final String DEVICE = "device";
|
||||||
|
public static final String MOBILE_DEVICE = "mobileDevice";
|
||||||
|
public static final String NEXUS = "nexus";
|
||||||
|
public static final String IPHONE = "iphone";
|
||||||
|
public static final String NONE = "none";
|
||||||
|
public static final String IMAGE_URL = "ImageURL";
|
||||||
|
public static final String TYPE = "type";
|
||||||
|
public static final String ID = "id";
|
||||||
|
|
||||||
|
public class IOSConstants {
|
||||||
|
|
||||||
|
private IOSConstants() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final String IS_REMOVE_APP = "isRemoveApp";
|
||||||
|
public static final String IS_PREVENT_BACKUP = "isPreventBackup";
|
||||||
|
public static final String I_TUNES_ID = "iTunesId";
|
||||||
|
public static final String LABEL = "label";
|
||||||
|
public static final String PUBLIC = "public";
|
||||||
|
public static final String OPCODE_INSTALL_ENTERPRISE_APPLICATION =
|
||||||
|
"INSTALL_ENTERPRISE_APPLICATION";
|
||||||
|
public static final String OPCODE_INSTALL_STORE_APPLICATION = "INSTALL_STORE_APPLICATION";
|
||||||
|
public static final String OPCODE_INSTALL_WEB_APPLICATION = "WEB_CLIP";
|
||||||
|
public static final String OPCODE_REMOVE_APPLICATION = "REMOVE_APPLICATION";
|
||||||
|
}
|
||||||
|
|
||||||
|
public class AndroidConstants {
|
||||||
|
private AndroidConstants() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final String OPCODE_INSTALL_APPLICATION = "INSTALL_APPLICATION";
|
||||||
|
public static final String OPCODE_UPDATE_APPLICATION = "UPDATE_APPLICATION";
|
||||||
|
public static final String OPCODE_UNINSTALL_APPLICATION = "UNINSTALL_APPLICATION";
|
||||||
|
}
|
||||||
|
|
||||||
|
public class RegistryConstants {
|
||||||
|
private RegistryConstants() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final String GENERAL_CONFIG_RESOURCE_PATH = "general";
|
||||||
|
}
|
||||||
|
|
||||||
|
public class APPManagerConstants {
|
||||||
|
private static final String APP_MANAGER_MDM_SERVICE_NAME =
|
||||||
|
"org.wso2.carbon.appmgt.mobile.interfaces.MDMOperations";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed 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.appmgt.mdm.osgiconnector.mdmmgt.util;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||||
|
import org.wso2.carbon.device.mgt.core.app.mgt.ApplicationManagementProviderService;
|
||||||
|
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MDMServiceAPIUtils class provides utility function.
|
||||||
|
*/
|
||||||
|
public class MDMServiceAPIUtils {
|
||||||
|
|
||||||
|
private static Log log = LogFactory.getLog(MDMServiceAPIUtils.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the DeviceManagementProviderService osgi service.
|
||||||
|
*
|
||||||
|
* @param tenantId tenant id
|
||||||
|
* @return DeviceManagementProviderService
|
||||||
|
*/
|
||||||
|
public static DeviceManagementProviderService getDeviceManagementService(int tenantId) {
|
||||||
|
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
|
||||||
|
ctx.setTenantId(tenantId, true);
|
||||||
|
DeviceManagementProviderService deviceManagementProviderService =
|
||||||
|
(DeviceManagementProviderService) ctx
|
||||||
|
.getOSGiService(DeviceManagementProviderService.class, null);
|
||||||
|
if (deviceManagementProviderService == null) {
|
||||||
|
String msg = "Device Management provider service has not initialized.";
|
||||||
|
log.error(msg);
|
||||||
|
throw new IllegalStateException(msg);
|
||||||
|
}
|
||||||
|
return deviceManagementProviderService;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the ApplicationManagementProviderService osgi service.
|
||||||
|
*
|
||||||
|
* @param tenantId tenant id
|
||||||
|
* @return ApplicationManagementProviderService
|
||||||
|
*/
|
||||||
|
public static ApplicationManagementProviderService getAppManagementService(int tenantId) {
|
||||||
|
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
|
||||||
|
ctx.setTenantId(tenantId, true);
|
||||||
|
ApplicationManagementProviderService applicationManagementProviderService =
|
||||||
|
(ApplicationManagementProviderService) ctx.
|
||||||
|
getOSGiService(
|
||||||
|
ApplicationManagementProviderService.class,
|
||||||
|
null);
|
||||||
|
if (applicationManagementProviderService == null) {
|
||||||
|
String msg = "Application management service has not initialized.";
|
||||||
|
log.error(msg);
|
||||||
|
throw new IllegalStateException(msg);
|
||||||
|
}
|
||||||
|
return applicationManagementProviderService;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
58
components/extensions/pom.xml
Normal file
58
components/extensions/pom.xml
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||||
|
<artifactId>carbon-device-mgt-plugins-parent</artifactId>
|
||||||
|
<version>2.2.2-SNAPSHOT</version>
|
||||||
|
<relativePath>../../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>extensions</artifactId>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<name>WSO2 Carbon - Mobile Plugins Extensions</name>
|
||||||
|
<url>http://wso2.org</url>
|
||||||
|
|
||||||
|
<modules>
|
||||||
|
<module>org.wso2.carbon.appmgt.mdm.osgiconnector</module>
|
||||||
|
</modules>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<pluginManagement>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-scr-plugin</artifactId>
|
||||||
|
<version>1.7.2</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>generate-scr-scrdescriptor</id>
|
||||||
|
<goals>
|
||||||
|
<goal>scr</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</pluginManagement>
|
||||||
|
</build>
|
||||||
|
</project>
|
||||||
@ -75,6 +75,10 @@
|
|||||||
<groupId>org.wso2.carbon.identity</groupId>
|
<groupId>org.wso2.carbon.identity</groupId>
|
||||||
<artifactId>org.wso2.carbon.identity.oauth.stub</artifactId>
|
<artifactId>org.wso2.carbon.identity.oauth.stub</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-pool.wso2</groupId>
|
||||||
|
<artifactId>commons-pool</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|||||||
@ -72,7 +72,7 @@
|
|||||||
org.wso2.carbon.utils,
|
org.wso2.carbon.utils,
|
||||||
javax.xml.bind,
|
javax.xml.bind,
|
||||||
javax.xml.bind.annotation,
|
javax.xml.bind.annotation,
|
||||||
javax.xml.parsers,
|
javax.xml.parsers; version="${javax.xml.parsers.import.pkg.version}",
|
||||||
org.w3c.dom
|
org.w3c.dom
|
||||||
</Import-Package>
|
</Import-Package>
|
||||||
<Export-Package>
|
<Export-Package>
|
||||||
|
|||||||
@ -36,7 +36,7 @@
|
|||||||
<module>androidsense-plugin</module>
|
<module>androidsense-plugin</module>
|
||||||
<module>arduino-plugin</module>
|
<module>arduino-plugin</module>
|
||||||
<module>raspberrypi-plugin</module>
|
<module>raspberrypi-plugin</module>
|
||||||
<module>virtual-fire-alarm-plugin</module>
|
<!--module>virtual-fire-alarm-plugin</module-->
|
||||||
<module>iot-base-plugin</module>
|
<module>iot-base-plugin</module>
|
||||||
<module>iot-analytics</module>
|
<module>iot-analytics</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|||||||
@ -176,6 +176,12 @@
|
|||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>org.wso2.carbon.device.mgt.analytics.data.publisher</artifactId>
|
<artifactId>org.wso2.carbon.device.mgt.analytics.data.publisher</artifactId>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wso2.carbon.analytics</groupId>
|
<groupId>org.wso2.carbon.analytics</groupId>
|
||||||
@ -199,6 +205,12 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.swagger</groupId>
|
<groupId>io.swagger</groupId>
|
||||||
<artifactId>swagger-jaxrs</artifactId>
|
<artifactId>swagger-jaxrs</artifactId>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.servlet</groupId>
|
<groupId>javax.servlet</groupId>
|
||||||
|
|||||||
@ -45,6 +45,9 @@ public class ApplicationInstallation extends AndroidOperation implements Seriali
|
|||||||
@ApiModelProperty(name = "url", value = "Application URL", required = true)
|
@ApiModelProperty(name = "url", value = "Application URL", required = true)
|
||||||
private String url;
|
private String url;
|
||||||
|
|
||||||
|
@ApiModelProperty(name = "schedule", value = "Schedule of the App installation.")
|
||||||
|
private String schedule;
|
||||||
|
|
||||||
public String getAppIdentifier() {
|
public String getAppIdentifier() {
|
||||||
return appIdentifier;
|
return appIdentifier;
|
||||||
}
|
}
|
||||||
@ -68,4 +71,14 @@ public class ApplicationInstallation extends AndroidOperation implements Seriali
|
|||||||
public void setUrl(String url) {
|
public void setUrl(String url) {
|
||||||
this.url = url;
|
this.url = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public String getSchedule() {
|
||||||
|
return schedule;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public void setSchedule(String schedule) {
|
||||||
|
this.schedule = schedule;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -43,10 +43,6 @@ public class ApplicationUninstallation extends AndroidOperation implements Seria
|
|||||||
@Pattern(regexp = "^[A-Za-z]*$")
|
@Pattern(regexp = "^[A-Za-z]*$")
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
@ApiModelProperty(name = "name", value = "The name of the application.", required = true)
|
|
||||||
@Size(min = 2, max = 45)
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
public String getAppIdentifier() {
|
public String getAppIdentifier() {
|
||||||
return appIdentifier;
|
return appIdentifier;
|
||||||
}
|
}
|
||||||
@ -63,11 +59,4 @@ public class ApplicationUninstallation extends AndroidOperation implements Seria
|
|||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -44,7 +44,7 @@ public class ApplicationUpdate extends AndroidOperation implements Serializable
|
|||||||
private String type;
|
private String type;
|
||||||
@ApiModelProperty(name = "url", value = "The URL of the application.", required = true)
|
@ApiModelProperty(name = "url", value = "The URL of the application.", required = true)
|
||||||
private String url;
|
private String url;
|
||||||
@ApiModelProperty(name = "schedule", value = "Application update schedule.", required = true)
|
@ApiModelProperty(name = "schedule", value = "Application update schedule.", required = false)
|
||||||
private String schedule;
|
private String schedule;
|
||||||
|
|
||||||
public String getAppIdentifier() {
|
public String getAppIdentifier() {
|
||||||
|
|||||||
@ -30,7 +30,7 @@ import java.io.Serializable;
|
|||||||
description = "This class carries all information related to UpgradeFirmware.")
|
description = "This class carries all information related to UpgradeFirmware.")
|
||||||
public class UpgradeFirmware extends AndroidOperation implements Serializable {
|
public class UpgradeFirmware extends AndroidOperation implements Serializable {
|
||||||
|
|
||||||
@ApiModelProperty(name = "schedule", value = "Schedule of the UpgradeFirmware.", required = true)
|
@ApiModelProperty(name = "schedule", value = "Schedule of the UpgradeFirmware.")
|
||||||
private String schedule;
|
private String schedule;
|
||||||
|
|
||||||
@ApiModelProperty(name = "server", value = "Firmware package server.")
|
@ApiModelProperty(name = "server", value = "Firmware package server.")
|
||||||
|
|||||||
@ -21,7 +21,6 @@ package org.wso2.carbon.mdm.services.android.services.impl;
|
|||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
|
||||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||||
import org.wso2.carbon.device.mgt.common.InvalidDeviceException;
|
import org.wso2.carbon.device.mgt.common.InvalidDeviceException;
|
||||||
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
||||||
@ -78,9 +77,7 @@ import java.net.URL;
|
|||||||
import java.net.URLConnection;
|
import java.net.URLConnection;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Path("/admin/devices")
|
@Path("/admin/devices")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@ -88,7 +85,7 @@ import java.util.Map;
|
|||||||
public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminService {
|
public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminService {
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(DeviceManagementAdminServiceImpl.class);
|
private static final Log log = LogFactory.getLog(DeviceManagementAdminServiceImpl.class);
|
||||||
private static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssXXX";
|
private static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
|
||||||
|
|
||||||
@POST
|
@POST
|
||||||
@Path("/lock-devices")
|
@Path("/lock-devices")
|
||||||
@ -536,45 +533,14 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
|
|||||||
}
|
}
|
||||||
|
|
||||||
ApplicationInstallation applicationInstallation = applicationInstallationBeanWrapper.getOperation();
|
ApplicationInstallation applicationInstallation = applicationInstallationBeanWrapper.getOperation();
|
||||||
JSONObject payload = new JSONObject(applicationInstallation.toJSON());
|
validateApplicationUrl(applicationInstallation.getUrl());
|
||||||
|
validateApplicationType(applicationInstallation.getType());
|
||||||
try {
|
validateScheduleDate(applicationInstallation.getSchedule());
|
||||||
URL url = new URL(payload.getString("url"));
|
|
||||||
URLConnection conn = url.openConnection();
|
|
||||||
|
|
||||||
//get all headers
|
|
||||||
Map<String, List<String>> headerFields = conn.getHeaderFields();
|
|
||||||
boolean isFile = false;
|
|
||||||
for (Map.Entry<String, List<String>> entry : headerFields.entrySet()) {
|
|
||||||
if ("Content-Type".equals(entry.getKey()) && entry.getValue() != null
|
|
||||||
&& entry.getValue().size() > 0 && "application/octet-stream".equals(entry.getValue().get(0))) {
|
|
||||||
isFile = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!isFile) {
|
|
||||||
String errorMessage = "URL is not pointed to a downloadable file.";
|
|
||||||
log.error(errorMessage);
|
|
||||||
throw new BadRequestException(
|
|
||||||
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
|
||||||
}
|
|
||||||
validateType(payload);
|
|
||||||
} catch (MalformedURLException e) {
|
|
||||||
String errorMessage = "Malformed application url.";
|
|
||||||
log.error(errorMessage);
|
|
||||||
throw new BadRequestException(
|
|
||||||
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
|
||||||
} catch (IOException e) {
|
|
||||||
String errorMessage = "Invalid application url.";
|
|
||||||
log.error(errorMessage);
|
|
||||||
throw new BadRequestException(
|
|
||||||
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
|
||||||
}
|
|
||||||
|
|
||||||
ProfileOperation operation = new ProfileOperation();
|
ProfileOperation operation = new ProfileOperation();
|
||||||
operation.setCode(AndroidConstants.OperationCodes.INSTALL_APPLICATION);
|
operation.setCode(AndroidConstants.OperationCodes.INSTALL_APPLICATION);
|
||||||
operation.setType(Operation.Type.PROFILE);
|
operation.setType(Operation.Type.PROFILE);
|
||||||
operation.setPayLoad(payload.toString());
|
operation.setPayLoad(applicationInstallation.toJSON());
|
||||||
return AndroidAPIUtils.getOperationResponse(applicationInstallationBeanWrapper.getDeviceIDs(),
|
return AndroidAPIUtils.getOperationResponse(applicationInstallationBeanWrapper.getDeviceIDs(),
|
||||||
operation);
|
operation);
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
@ -616,6 +582,10 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
|
|||||||
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
||||||
}
|
}
|
||||||
ApplicationUpdate applicationUpdate = applicationUpdateBeanWrapper.getOperation();
|
ApplicationUpdate applicationUpdate = applicationUpdateBeanWrapper.getOperation();
|
||||||
|
validateApplicationUrl(applicationUpdate.getUrl());
|
||||||
|
validateApplicationType(applicationUpdate.getType());
|
||||||
|
validateScheduleDate(applicationUpdate.getSchedule());
|
||||||
|
|
||||||
ProfileOperation operation = new ProfileOperation();
|
ProfileOperation operation = new ProfileOperation();
|
||||||
operation.setCode(AndroidConstants.OperationCodes.UPDATE_APPLICATION);
|
operation.setCode(AndroidConstants.OperationCodes.UPDATE_APPLICATION);
|
||||||
operation.setType(Operation.Type.PROFILE);
|
operation.setType(Operation.Type.PROFILE);
|
||||||
@ -658,8 +628,7 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
|
|||||||
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
||||||
}
|
}
|
||||||
ApplicationUninstallation applicationUninstallation = applicationUninstallationBeanWrapper.getOperation();
|
ApplicationUninstallation applicationUninstallation = applicationUninstallationBeanWrapper.getOperation();
|
||||||
JSONObject payload = new JSONObject(applicationUninstallation.toJSON());
|
validateApplicationType(applicationUninstallation.getType());
|
||||||
validateType(payload);
|
|
||||||
|
|
||||||
ProfileOperation operation = new ProfileOperation();
|
ProfileOperation operation = new ProfileOperation();
|
||||||
operation.setCode(AndroidConstants.OperationCodes.UNINSTALL_APPLICATION);
|
operation.setCode(AndroidConstants.OperationCodes.UNINSTALL_APPLICATION);
|
||||||
@ -686,25 +655,6 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validateType(JSONObject payload) {
|
|
||||||
if (payload.has("type")) {
|
|
||||||
String type = payload.getString("type");
|
|
||||||
if (!"enterprise".equalsIgnoreCase(type)
|
|
||||||
&& !"public".equalsIgnoreCase(type)
|
|
||||||
&& !"webapp".equalsIgnoreCase(type)) {
|
|
||||||
String errorMessage = "Invalid application type.";
|
|
||||||
log.error(errorMessage);
|
|
||||||
throw new BadRequestException(
|
|
||||||
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
String errorMessage = "Application type is missing.";
|
|
||||||
log.error(errorMessage);
|
|
||||||
throw new BadRequestException(
|
|
||||||
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@POST
|
@POST
|
||||||
@Path("/blacklist-applications")
|
@Path("/blacklist-applications")
|
||||||
@Override
|
@Override
|
||||||
@ -761,13 +711,7 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
|
|||||||
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
||||||
}
|
}
|
||||||
UpgradeFirmware upgradeFirmware = upgradeFirmwareBeanWrapper.getOperation();
|
UpgradeFirmware upgradeFirmware = upgradeFirmwareBeanWrapper.getOperation();
|
||||||
|
validateScheduleDate(upgradeFirmware.getSchedule());
|
||||||
//validate date
|
|
||||||
if(upgradeFirmware != null && upgradeFirmware.getSchedule() != null){
|
|
||||||
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
|
|
||||||
sdf.setLenient(false);
|
|
||||||
Date date = sdf.parse(upgradeFirmware.getSchedule());
|
|
||||||
}
|
|
||||||
|
|
||||||
ProfileOperation operation = new ProfileOperation();
|
ProfileOperation operation = new ProfileOperation();
|
||||||
operation.setCode(AndroidConstants.OperationCodes.UPGRADE_FIRMWARE);
|
operation.setCode(AndroidConstants.OperationCodes.UPGRADE_FIRMWARE);
|
||||||
@ -789,11 +733,6 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
|
|||||||
log.error(errorMessage, e);
|
log.error(errorMessage, e);
|
||||||
throw new UnexpectedServerErrorException(
|
throw new UnexpectedServerErrorException(
|
||||||
new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
|
new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build());
|
||||||
} catch (ParseException e) {
|
|
||||||
String errorMessage = "Issue in validating the schedule date";
|
|
||||||
log.error(errorMessage);
|
|
||||||
throw new BadRequestException(
|
|
||||||
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1079,4 +1018,71 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean hasValidAPKContentType(String contentType){
|
||||||
|
if (contentType != null){
|
||||||
|
switch (contentType) {
|
||||||
|
case MediaType.APPLICATION_OCTET_STREAM:
|
||||||
|
case "application/android":
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void validateApplicationUrl(String apkUrl) {
|
||||||
|
try {
|
||||||
|
URL url = new URL(apkUrl);
|
||||||
|
URLConnection conn = url.openConnection();
|
||||||
|
if (!hasValidAPKContentType(conn.getContentType())) {
|
||||||
|
String errorMessage = "URL is not pointed to a downloadable file.";
|
||||||
|
log.error(errorMessage);
|
||||||
|
throw new BadRequestException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
||||||
|
}
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
String errorMessage = "Malformed application url.";
|
||||||
|
log.error(errorMessage);
|
||||||
|
throw new BadRequestException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
||||||
|
} catch (IOException e) {
|
||||||
|
String errorMessage = "Invalid application url.";
|
||||||
|
log.error(errorMessage);
|
||||||
|
throw new BadRequestException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void validateApplicationType(String type) {
|
||||||
|
if (type != null) {
|
||||||
|
if (!"enterprise".equalsIgnoreCase(type)
|
||||||
|
&& !"public".equalsIgnoreCase(type)
|
||||||
|
&& !"webapp".equalsIgnoreCase(type)) {
|
||||||
|
String errorMessage = "Invalid application type.";
|
||||||
|
log.error(errorMessage);
|
||||||
|
throw new BadRequestException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
String errorMessage = "Application type is missing.";
|
||||||
|
log.error(errorMessage);
|
||||||
|
throw new BadRequestException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void validateScheduleDate(String dateString){
|
||||||
|
try {
|
||||||
|
if (dateString != null) {
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
|
||||||
|
sdf.setLenient(false);
|
||||||
|
sdf.parse(dateString);
|
||||||
|
}
|
||||||
|
} catch (ParseException e) {
|
||||||
|
String errorMessage = "Issue in validating the schedule date";
|
||||||
|
log.error(errorMessage);
|
||||||
|
throw new BadRequestException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -99,7 +99,7 @@
|
|||||||
<th data-for="By Owner" class="text-filter"></th>
|
<th data-for="By Owner" class="text-filter"></th>
|
||||||
<th data-for="By Status" class="select-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 Platform" class="select-filter data-platform"></th>
|
||||||
<th data-for="By Ownership" class="select-filter"></th>
|
<th data-for="By Ownership" class="select-filter data-ownership"></th>
|
||||||
<th class="no-sort"></th>
|
<th class="no-sort"></th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="bulk-action-row hidden">
|
<tr class="bulk-action-row hidden">
|
||||||
@ -107,9 +107,15 @@
|
|||||||
<div id="operation-bar">
|
<div id="operation-bar">
|
||||||
{{unit "mdm.unit.device.operation-bar"}}
|
{{unit "mdm.unit.device.operation-bar"}}
|
||||||
</div>
|
</div>
|
||||||
<div id="operation-guide" class="bs-callout bs-callout-info">
|
<div id="operation-guide" class="message message-info">
|
||||||
<h4>Enabling Device Operations</h4>
|
<h4 class="remove-margin">
|
||||||
<p>To enable device operations, select the desired platform from above filter.</p>
|
<i class="icon fw fw-info"></i>
|
||||||
|
Enabling Bulk Operations on Devices
|
||||||
|
</h4>
|
||||||
|
<h5 class="add-padding-top-1x">
|
||||||
|
To enable bulk operations, select the desired platform and
|
||||||
|
ownership from above filter.
|
||||||
|
</h5>
|
||||||
</div>
|
</div>
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@ -95,8 +95,6 @@ function loadDevices() {
|
|||||||
"data": []
|
"data": []
|
||||||
};
|
};
|
||||||
|
|
||||||
return JSON.stringify(json);
|
|
||||||
|
|
||||||
} else if (data["count"] > 0) {
|
} else if (data["count"] > 0) {
|
||||||
$(noDeviceView).remove();
|
$(noDeviceView).remove();
|
||||||
$("#enroll-btn").removeClass('hidden');
|
$("#enroll-btn").removeClass('hidden');
|
||||||
@ -114,7 +112,7 @@ function loadDevices() {
|
|||||||
user: data.devices[index].enrolmentInfo.owner,
|
user: data.devices[index].enrolmentInfo.owner,
|
||||||
status: data.devices[index].enrolmentInfo.status,
|
status: data.devices[index].enrolmentInfo.status,
|
||||||
ownership: data.devices[index].enrolmentInfo.ownership,
|
ownership: data.devices[index].enrolmentInfo.ownership,
|
||||||
deviceType: data.devices[index].type,
|
type: data.devices[index].type,
|
||||||
deviceIdentifier: data.devices[index].deviceIdentifier,
|
deviceIdentifier: data.devices[index].deviceIdentifier,
|
||||||
name : data.devices[index].name
|
name : data.devices[index].name
|
||||||
}
|
}
|
||||||
@ -127,14 +125,15 @@ function loadDevices() {
|
|||||||
"data": objects
|
"data": objects
|
||||||
};
|
};
|
||||||
|
|
||||||
return JSON.stringify(json);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return JSON.stringify(json);
|
||||||
};
|
};
|
||||||
|
|
||||||
// possible params - nRow, aData, dataIndex
|
// possible params - nRow, aData, dataIndex
|
||||||
var fnCreatedRow = function (nRow, aData) {
|
var fnCreatedRow = function (nRow, aData) {
|
||||||
$(nRow).attr('data-type', 'selectable');
|
$(nRow).attr('data-type', 'selectable');
|
||||||
$(nRow).attr('data-devicetype', aData["deviceType"]);
|
$(nRow).attr('data-devicetype', aData["type"]);
|
||||||
$(nRow).attr('data-deviceid', aData["deviceIdentifier"]);
|
$(nRow).attr('data-deviceid', aData["deviceIdentifier"]);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -143,14 +142,15 @@ function loadDevices() {
|
|||||||
class : 'remove-padding icon-only content-fill viewEnabledIcon',
|
class : 'remove-padding icon-only content-fill viewEnabledIcon',
|
||||||
data : null,
|
data : null,
|
||||||
render: function (data, type, row) {
|
render: function (data, type, row) {
|
||||||
var deviceType = row.deviceType;
|
var deviceType = row.type;
|
||||||
var deviceIdentifier = row.deviceIdentifier;
|
var deviceIdentifier = row.deviceIdentifier;
|
||||||
var url = "#";
|
var url = "#";
|
||||||
if (status != 'REMOVED') {
|
if (row.status != 'REMOVED') {
|
||||||
url = "device/" + deviceType + "?id=" + deviceIdentifier;
|
url = "device/" + deviceType + "?id=" + deviceIdentifier;
|
||||||
}
|
}
|
||||||
return '<div onclick="javascript:InitiateViewOption(\'' + url + '\')" class="thumbnail icon">' +
|
return '<div onclick="javascript:InitiateViewOption(\'' + url + '\')" class="thumbnail icon">' +
|
||||||
'<i class="square-element text fw fw-mobile"></i></div>'
|
'<i class="square-element text fw fw-mobile"></i>' +
|
||||||
|
'</div>'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -170,7 +170,7 @@ function loadDevices() {
|
|||||||
class: 'fade-edge remove-padding-top',
|
class: 'fade-edge remove-padding-top',
|
||||||
data: 'user',
|
data: 'user',
|
||||||
render: function (user) {
|
render: function (user) {
|
||||||
return '<div><label class="label-bold">Owner : </label>' + user + '</div>';
|
return '<div><label class="label-bold">Owner : </label>' + user + '</div>';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -180,33 +180,33 @@ function loadDevices() {
|
|||||||
var html;
|
var html;
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case 'ACTIVE' :
|
case 'ACTIVE' :
|
||||||
html = '<span><i class="fw fw-ok icon-success"></i> Active</span>';
|
html = '<span><i class="fw fw-ok icon-success"></i> Active</span>';
|
||||||
|
break;
|
||||||
|
case 'UNREACHABLE' :
|
||||||
|
html = '<span><i class="fw fw-question-mark icon-warning"></i> Unreachable</span>';
|
||||||
break;
|
break;
|
||||||
case 'INACTIVE' :
|
case 'INACTIVE' :
|
||||||
html = '<span><i class="fw fw-warning icon-warning"></i> Inactive</span>';
|
html = '<span><i class="fw fw-warning icon-error"></i> Inactive</span>';
|
||||||
break;
|
|
||||||
case 'BLOCKED' :
|
|
||||||
html = '<span><i class="fw fw-remove icon-danger"></i> Blocked</span>';
|
|
||||||
break;
|
break;
|
||||||
case 'REMOVED' :
|
case 'REMOVED' :
|
||||||
html = '<span><i class="fw fw-delete icon-danger"></i> Removed</span>';
|
html = '<span><i class="fw fw-delete icon-danger"></i> Removed</span>';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return '<div><label class="label-bold">Status : </label>' + html + '</div>';
|
return '<div><label class="label-bold">Status : </label>' + html + '</div>';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
className: 'fade-edge remove-padding-top',
|
className: 'fade-edge remove-padding-top',
|
||||||
data: 'deviceType',
|
data: 'type',
|
||||||
render: function (deviceType) {
|
render: function (type) {
|
||||||
return '<div><label class="label-bold">Type : </label>' + deviceType + '</div>';
|
return '<div><label class="label-bold">Type : </label>' + type + '</div>';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
className: 'fade-edge remove-padding-top',
|
className: 'fade-edge remove-padding-top',
|
||||||
data: 'ownership',
|
data: 'ownership',
|
||||||
render: function (ownership) {
|
render: function (ownership) {
|
||||||
return '<div><label class="label-bold">Ownership : </label>' + ownership + '</div>';
|
return '<div><label class="label-bold">Ownership : </label>' + ownership + '</div>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
@ -220,7 +220,6 @@ function loadDevices() {
|
|||||||
function () {
|
function () {
|
||||||
$(".icon .text").res_text(0.2);
|
$(".icon .text").res_text(0.2);
|
||||||
$('#device-grid').removeClass('hidden');
|
$('#device-grid').removeClass('hidden');
|
||||||
$("#loading-content").remove();
|
|
||||||
}, {
|
}, {
|
||||||
"placeholder" : "Search By Device Name",
|
"placeholder" : "Search By Device Name",
|
||||||
"searchKey" : "name"
|
"searchKey" : "name"
|
||||||
@ -245,38 +244,11 @@ function loadDevices() {
|
|||||||
// });
|
// });
|
||||||
//}
|
//}
|
||||||
|
|
||||||
function initPage() {
|
|
||||||
// var currentUser = $("#device-listing").data("currentUser");
|
|
||||||
// var serviceURL = "/api/device-mgt/v1.0/devices";
|
|
||||||
//
|
|
||||||
// invokerUtil.get(
|
|
||||||
// serviceURL,
|
|
||||||
// function (data) {
|
|
||||||
// if (data) {
|
|
||||||
// data = JSON.parse(data);
|
|
||||||
// if (data["count"] > 0) {
|
|
||||||
// $(".bulk-action-row").removeClass('hidden');
|
|
||||||
// $("#device-table").removeClass('hidden');
|
|
||||||
// loadDevices();
|
|
||||||
// } else {
|
|
||||||
// $("#enroll-btn").addClass('hidden');
|
|
||||||
// $("#advanced-search-btn").addClass('hidden');
|
|
||||||
// $("#device-table").addClass('hidden');
|
|
||||||
// $("#no-device-view").removeClass('hidden');
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }, function () {
|
|
||||||
// initPage();
|
|
||||||
// }
|
|
||||||
// );
|
|
||||||
loadDevices();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* DOM ready functions.
|
* DOM ready functions.
|
||||||
*/
|
*/
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
initPage();
|
loadDevices();
|
||||||
|
|
||||||
/* Adding selected class for selected devices */
|
/* Adding selected class for selected devices */
|
||||||
$(deviceCheckbox).each(function () {
|
$(deviceCheckbox).each(function () {
|
||||||
|
|||||||
@ -33,6 +33,7 @@
|
|||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
|
<!--suppress HtmlUnknownTarget -->
|
||||||
<a href="{{@app.context}}/policies">
|
<a href="{{@app.context}}/policies">
|
||||||
Policies
|
Policies
|
||||||
</a>
|
</a>
|
||||||
@ -41,25 +42,29 @@
|
|||||||
|
|
||||||
{{#zone "navbarActions"}}
|
{{#zone "navbarActions"}}
|
||||||
{{#if permissions.ADD_ADMIN_POLICY}}
|
{{#if permissions.ADD_ADMIN_POLICY}}
|
||||||
<li>
|
{{#equal noPolicy false}}
|
||||||
<a href="{{@app.context}}/policy/add" class="cu-btn">
|
<li>
|
||||||
<span class="icon fw-stack">
|
<!--suppress HtmlUnknownTarget -->
|
||||||
<i class="fw fw-add fw-stack-1x"></i>
|
<a href="{{@app.context}}/policy/add" class="cu-btn">
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
<span class="icon fw-stack">
|
||||||
</span>
|
<i class="fw fw-add fw-stack-1x"></i>
|
||||||
Add Policy
|
<i class="fw fw-ring fw-stack-2x"></i>
|
||||||
</a>
|
</span>
|
||||||
</li>
|
Add New Policy
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{/equal}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if permissions.CHANGE_POLICY_PRIORITY}}
|
{{#if permissions.CHANGE_POLICY_PRIORITY}}
|
||||||
{{#equal noPolicy false}}
|
{{#equal noPolicy false}}
|
||||||
<li>
|
<li>
|
||||||
|
<!--suppress HtmlUnknownTarget -->
|
||||||
<a href="{{@app.context}}/policy/priority" class="cu-btn">
|
<a href="{{@app.context}}/policy/priority" class="cu-btn">
|
||||||
<span class="icon fw-stack">
|
<span class="icon fw-stack">
|
||||||
<i class="fw fw-throttling-policy fw-stack-1x"></i>
|
<i class="fw fw-throttling-policy fw-stack-1x"></i>
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
<i class="fw fw-ring fw-stack-2x"></i>
|
||||||
</span>
|
</span>
|
||||||
Policy Priority
|
Policy Priority
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{{/equal}}
|
{{/equal}}
|
||||||
@ -70,7 +75,7 @@
|
|||||||
<i class="fw fw-check fw-stack-1x"></i>
|
<i class="fw fw-check fw-stack-1x"></i>
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
<i class="fw fw-ring fw-stack-2x"></i>
|
||||||
</span>
|
</span>
|
||||||
Apply Changes To Devices
|
Apply Changes To Devices
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{{/zone}}
|
{{/zone}}
|
||||||
@ -82,18 +87,21 @@
|
|||||||
{{#equal noPolicy true}}
|
{{#equal noPolicy true}}
|
||||||
<div id="ast-container" class="ast-container list-view">
|
<div id="ast-container" class="ast-container list-view">
|
||||||
<div class="ctrl-info-panel col-centered text-center wr-login">
|
<div class="ctrl-info-panel col-centered text-center wr-login">
|
||||||
<h2>You don't have any policy at the moment.</h2>
|
<h3 class="text-muted">
|
||||||
<br/>
|
<i class="fw fw-policy fw-3x"></i>
|
||||||
|
</h3>
|
||||||
|
<h3 class="text-muted">You do not have any device policy at the moment</h3>
|
||||||
{{#if permissions.ADD_ADMIN_POLICY}}
|
{{#if permissions.ADD_ADMIN_POLICY}}
|
||||||
<p class="text-center">
|
<h3>
|
||||||
<a href="{{@app.context}}/policy/add" class="wr-btn">
|
<!--suppress HtmlUnknownTarget -->
|
||||||
<span class="fw-stack">
|
<a href="{{@app.context}}/policy/add" class="btn-operations btn-default">
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
<span class="fw-stack">
|
||||||
<i class="fw fw-add fw-stack-1x"></i>
|
<i class="fw fw-ring fw-stack-2x"></i>
|
||||||
</span>
|
<i class="fw fw-add fw-stack-1x"></i>
|
||||||
Add New Policy
|
</span>
|
||||||
|
Add New Policy
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</h3>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -229,6 +237,7 @@
|
|||||||
data-display="{{status}}">
|
data-display="{{status}}">
|
||||||
</td>
|
</td>
|
||||||
<td class="text-right content-fill text-left-on-grid-view no-wrap">
|
<td class="text-right content-fill text-left-on-grid-view no-wrap">
|
||||||
|
<!--suppress HtmlUnknownTarget -->
|
||||||
<a href="{{@app.context}}/policy/edit?id={{id}}"
|
<a href="{{@app.context}}/policy/edit?id={{id}}"
|
||||||
data-id="{{id}}"
|
data-id="{{id}}"
|
||||||
data-click-event="remove-form"
|
data-click-event="remove-form"
|
||||||
|
|||||||
@ -19,7 +19,7 @@
|
|||||||
{{unit "mdm.unit.date-range-picker"}}
|
{{unit "mdm.unit.date-range-picker"}}
|
||||||
|
|
||||||
{{#zone "content"}}
|
{{#zone "content"}}
|
||||||
<div id = "operations-mod" data-permissions="{{permissions}}">
|
<div id="operations-mod" data-permissions="{{permissions}}" data-device-type="{{deviceType}}" data-ownership="{{ownership}}">
|
||||||
{{unit "mdm.unit.device.operation-mod"}}
|
{{unit "mdm.unit.device.operation-mod"}}
|
||||||
</div>
|
</div>
|
||||||
{{/zone}}
|
{{/zone}}
|
||||||
|
|||||||
@ -16,8 +16,8 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function onRequest() {
|
function onRequest(context) {
|
||||||
// var log = new Log("mdm.unit.device.operation-bar");
|
var log = new Log("mdm.unit.device.operation-bar");
|
||||||
var userModule = require("/app/modules/business-controllers/user.js")["userModule"];
|
var userModule = require("/app/modules/business-controllers/user.js")["userModule"];
|
||||||
var viewModel = {};
|
var viewModel = {};
|
||||||
var permissions = {};
|
var permissions = {};
|
||||||
@ -93,10 +93,14 @@ function onRequest() {
|
|||||||
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/windows/ring")) {
|
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/windows/ring")) {
|
||||||
permissions["windows"].push("DEVICE_RING");
|
permissions["windows"].push("DEVICE_RING");
|
||||||
}
|
}
|
||||||
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/windows/lockreset")) {
|
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/windows/lock-reset")) {
|
||||||
permissions["windows"].push("LOCK_RESET");
|
permissions["windows"].push("LOCK_RESET");
|
||||||
}
|
}
|
||||||
|
|
||||||
viewModel["permissions"] = stringify(permissions);
|
viewModel["permissions"] = stringify(permissions);
|
||||||
|
|
||||||
|
viewModel["deviceType"] = context.unit.params.deviceType;
|
||||||
|
viewModel["ownership"] = context.unit.params.ownership;
|
||||||
|
|
||||||
return viewModel;
|
return viewModel;
|
||||||
}
|
}
|
||||||
@ -31,6 +31,14 @@ var operations = '.wr-operations',
|
|||||||
"ANDROID": "android",
|
"ANDROID": "android",
|
||||||
"IOS": "ios",
|
"IOS": "ios",
|
||||||
"WINDOWS": "windows"
|
"WINDOWS": "windows"
|
||||||
|
},
|
||||||
|
ownershipTypeConstants = {
|
||||||
|
"BYOD": "BYOD",
|
||||||
|
"COPE": "COPE"
|
||||||
|
},
|
||||||
|
operationBarModeConstants = {
|
||||||
|
"BULK": "BULK_OPERATION_MODE",
|
||||||
|
"SINGLE": "SINGLE_OPERATION_MODE"
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -94,62 +102,90 @@ function getDevicesByTypes(deviceList) {
|
|||||||
return deviceTypes;
|
return deviceTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
function unloadOperationBar() {
|
//function unloadOperationBar() {
|
||||||
$("#showOperationsBtn").addClass("hidden");
|
// $("#showOperationsBtn").addClass("hidden");
|
||||||
$(".wr-operations").html("");
|
// $(".wr-operations").html("");
|
||||||
}
|
//}
|
||||||
|
|
||||||
function loadOperationBar(deviceType) {
|
function loadOperationBar(deviceType, ownership, mode) {
|
||||||
var operationBar = $("#operations-bar");
|
var operationBar = $("#operations-bar");
|
||||||
var operationBarSrc = operationBar.attr("src");
|
var operationBarSrc = operationBar.attr("src");
|
||||||
var platformType = deviceType;
|
|
||||||
//var selectedDeviceID = deviceId;
|
|
||||||
$.template("operations-bar", operationBarSrc, function (template) {
|
$.template("operations-bar", operationBarSrc, function (template) {
|
||||||
//var serviceURL = "/mdm-admin/features/" + platformType;
|
var serviceURL = "/api/device-mgt/v1.0/devices/" + deviceType + "/*/features";
|
||||||
var serviceURL = "/api/device-mgt/v1.0/devices/" + platformType + "/*/features";
|
invokerUtil.get(
|
||||||
var successCallback = function (data) {
|
serviceURL,
|
||||||
var permittedOperations = [];
|
// success callback
|
||||||
var i;
|
function (data) {
|
||||||
var permissionList = $("#operations-mod").data("permissions");
|
var permittedOperations = [];
|
||||||
var totalFeatures = JSON.parse(data);
|
var i;
|
||||||
for (i = 0; i < permissionList[deviceType].length; i++) {
|
var permissionList = $("#operations-mod").data("permissions");
|
||||||
var j;
|
var totalFeatures = JSON.parse(data);
|
||||||
for (j = 0; j < totalFeatures.length; j++) {
|
for (i = 0; i < permissionList[deviceType].length; i++) {
|
||||||
if (permissionList[deviceType][i] == totalFeatures[j]["code"]) {
|
var j;
|
||||||
permittedOperations.push(totalFeatures[j]);
|
for (j = 0; j < totalFeatures.length; j++) {
|
||||||
|
if (permissionList[deviceType][i] == totalFeatures[j]["code"]) {
|
||||||
|
if (deviceType == platformTypeConstants.ANDROID) {
|
||||||
|
if (totalFeatures[j]["code"] == "DEVICE_UNLOCK") {
|
||||||
|
if (ownership == ownershipTypeConstants.COPE) {
|
||||||
|
permittedOperations.push(totalFeatures[j]);
|
||||||
|
}
|
||||||
|
} else if (totalFeatures[j]["code"] == "WIPE_DATA") {
|
||||||
|
if (mode == operationBarModeConstants.BULK) {
|
||||||
|
if (ownership == ownershipTypeConstants.COPE) {
|
||||||
|
permittedOperations.push(totalFeatures[j]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
permittedOperations.push(totalFeatures[j]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
permittedOperations.push(totalFeatures[j]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
permittedOperations.push(totalFeatures[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
var viewModel = {};
|
var viewModel = {};
|
||||||
permittedOperations = permittedOperations.filter(function (current) {
|
permittedOperations = permittedOperations.filter(function (current) {
|
||||||
var iconName;
|
var iconName;
|
||||||
switch (deviceType) {
|
switch (deviceType) {
|
||||||
case platformTypeConstants.ANDROID:
|
case platformTypeConstants.ANDROID:
|
||||||
iconName = operationModule.getAndroidIconForFeature(current.code);
|
iconName = operationModule.getAndroidIconForFeature(current.code);
|
||||||
current.type = deviceType;
|
break;
|
||||||
break;
|
case platformTypeConstants.WINDOWS:
|
||||||
case platformTypeConstants.WINDOWS:
|
iconName = operationModule.getWindowsIconForFeature(current.code);
|
||||||
iconName = operationModule.getWindowsIconForFeature(current.code);
|
break;
|
||||||
break;
|
case platformTypeConstants.IOS:
|
||||||
case platformTypeConstants.IOS:
|
iconName = operationModule.getIOSIconForFeature(current.code);
|
||||||
iconName = operationModule.getIOSIconForFeature(current.code);
|
break;
|
||||||
break;
|
}
|
||||||
}
|
|
||||||
|
/* adding ownership in addition to device-type
|
||||||
|
as it's vital in cases where UI for the same feature should change
|
||||||
|
according to ownership
|
||||||
|
*/
|
||||||
|
if (ownership) {
|
||||||
|
current.ownership = ownership;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (iconName) {
|
||||||
|
current.icon = iconName;
|
||||||
|
}
|
||||||
|
|
||||||
if (iconName) {
|
|
||||||
current.icon = iconName;
|
|
||||||
return current;
|
return current;
|
||||||
}
|
});
|
||||||
});
|
|
||||||
|
|
||||||
viewModel.features = permittedOperations;
|
viewModel.features = permittedOperations;
|
||||||
var content = template(viewModel);
|
var content = template(viewModel);
|
||||||
$(".wr-operations").html(content);
|
$(".wr-operations").html(content);
|
||||||
};
|
},
|
||||||
invokerUtil.get(serviceURL, successCallback, function (message) {
|
// error callback
|
||||||
$(".wr-operations").html(message);
|
function (message) {
|
||||||
});
|
$(".wr-operations").html(message);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -107,14 +107,16 @@
|
|||||||
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
|
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
|
||||||
<h4>
|
<h4>
|
||||||
{{#equal code "WIPE_DATA"}}
|
{{#equal code "WIPE_DATA"}}
|
||||||
{{#equal type "android"}}
|
{{#equal deviceType "android"}}
|
||||||
Enter PIN code (Optional - This is required only if the device type is BYOD).
|
{{#equal ownership "BYOD"}}
|
||||||
<br><br>
|
Enter PIN code* of the device
|
||||||
<div>
|
<br><br>
|
||||||
<input type="password" class="form-control modal-input operationDataKeys" id="pin"
|
<div>
|
||||||
data-key="pin">
|
<input id="pin" type="password"
|
||||||
</div>
|
class="form-control modal-input operationDataKeys"
|
||||||
<br>
|
placeholder="[ Required for a BYOD device ]" data-key="pin" />
|
||||||
|
</div>
|
||||||
|
{{/equal}}
|
||||||
{{/equal}}
|
{{/equal}}
|
||||||
{{/equal}}
|
{{/equal}}
|
||||||
{{#equal code "NOTIFICATION"}}
|
{{#equal code "NOTIFICATION"}}
|
||||||
@ -141,26 +143,28 @@
|
|||||||
<br>
|
<br>
|
||||||
{{/equal}}
|
{{/equal}}
|
||||||
{{#equal code "DEVICE_LOCK"}}
|
{{#equal code "DEVICE_LOCK"}}
|
||||||
{{#equal type "android"}}
|
{{#equal deviceType "android"}}
|
||||||
Type your message to be shown in the lock screen (Optional).
|
{{#equal ownership "COPE"}}
|
||||||
<br><br>
|
<label class="wr-input-control checkbox">
|
||||||
<div>
|
<input id="hard-lock" type="checkbox" class="form-control operationDataKeys"
|
||||||
<textarea class="form-control modal-input operationDataKeys" id="lock-message"
|
data-key="hard-lock"/>
|
||||||
data-key="lock-message"></textarea>
|
|
||||||
</div>
|
|
||||||
<br>
|
|
||||||
<label class="wr-input-control checkbox">
|
|
||||||
<input id="hard-lock" type="checkbox" class="form-control operationDataKeys"
|
|
||||||
data-key="hard-lock"/>
|
|
||||||
<span class="helper" title="Once it enables, device will be blocked permanently.">
|
<span class="helper" title="Once it enables, device will be blocked permanently.">
|
||||||
Enable Permanent Lock
|
Enable Permanent Lock
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
|
<br><br>
|
||||||
|
{{/equal}}
|
||||||
|
Type your message to be shown in the lock screen
|
||||||
|
<br><br>
|
||||||
|
<div>
|
||||||
|
<textarea id="lock-message" class="form-control modal-input operationDataKeys"
|
||||||
|
data-key="lock-message" placeholder="[ Message content is optional ]"></textarea>
|
||||||
|
</div>
|
||||||
{{/equal}}
|
{{/equal}}
|
||||||
{{/equal}}
|
{{/equal}}
|
||||||
{{#equal code "UPGRADE_FIRMWARE"}}
|
{{#equal code "UPGRADE_FIRMWARE"}}
|
||||||
{{#equal type "android"}}
|
{{#equal deviceType "android"}}
|
||||||
Enter firmware upgrade scheduling information.
|
Enter firmware upgrade scheduling information.
|
||||||
<br><br>
|
<br><br>
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
|
|||||||
@ -1195,9 +1195,9 @@ var operationModule = function () {
|
|||||||
var featureMap = {
|
var featureMap = {
|
||||||
"DEVICE_LOCK": "lock-devices",
|
"DEVICE_LOCK": "lock-devices",
|
||||||
"DISENROLL": "disenroll",
|
"DISENROLL": "disenroll",
|
||||||
"DEVICE_RING": "ring-devices",
|
"DEVICE_RING": "ring-device",
|
||||||
"LOCK_RESET": "lock-reset-devices",
|
"LOCK_RESET": "lock-reset",
|
||||||
"WIPE_DATA": "wipe-devices"
|
"WIPE_DATA": "wipe-data"
|
||||||
};
|
};
|
||||||
//return "/mdm-windows-agent/services/windows/operation/" + featureMap[operationCode];
|
//return "/mdm-windows-agent/services/windows/operation/" + featureMap[operationCode];
|
||||||
return "/api/device-mgt/windows/v1.0/services/windows/admin/devices/" + featureMap[operationCode];
|
return "/api/device-mgt/windows/v1.0/services/windows/admin/devices/" + featureMap[operationCode];
|
||||||
@ -1211,16 +1211,16 @@ var operationModule = function () {
|
|||||||
var featureMap = {
|
var featureMap = {
|
||||||
"DEVICE_LOCK": "fw-lock",
|
"DEVICE_LOCK": "fw-lock",
|
||||||
"DEVICE_LOCATION": "fw-map-location",
|
"DEVICE_LOCATION": "fw-map-location",
|
||||||
"CLEAR_PASSWORD": "fw-key",
|
"CLEAR_PASSWORD": "fw-clear",
|
||||||
"ENTERPRISE_WIPE": "fw-clear",
|
"ENTERPRISE_WIPE": "fw-block",
|
||||||
"WIPE_DATA": "fw-database",
|
"WIPE_DATA": "fw-delete",
|
||||||
"DEVICE_RING": "fw-dial-up",
|
"DEVICE_RING": "fw-dial-up",
|
||||||
"DEVICE_REBOOT": "fw-refresh",
|
"DEVICE_REBOOT": "fw-refresh",
|
||||||
"UPGRADE_FIRMWARE": "fw-up-arrow",
|
"UPGRADE_FIRMWARE": "fw-hardware",
|
||||||
"DEVICE_MUTE": "fw-mute",
|
"DEVICE_MUTE": "fw-mute",
|
||||||
"NOTIFICATION": "fw-message",
|
"NOTIFICATION": "fw-message",
|
||||||
"CHANGE_LOCK_CODE": "fw-security",
|
"CHANGE_LOCK_CODE": "fw-security",
|
||||||
"DEVICE_UNLOCK": "fw-lock"
|
"DEVICE_UNLOCK": "fw-key"
|
||||||
};
|
};
|
||||||
return featureMap[operationCode];
|
return featureMap[operationCode];
|
||||||
};
|
};
|
||||||
@ -1234,9 +1234,9 @@ var operationModule = function () {
|
|||||||
var featureMap = {
|
var featureMap = {
|
||||||
"DEVICE_LOCK": "fw-lock",
|
"DEVICE_LOCK": "fw-lock",
|
||||||
"DEVICE_RING": "fw-dial-up",
|
"DEVICE_RING": "fw-dial-up",
|
||||||
"DISENROLL": "fw-delete",
|
"DISENROLL": "fw-export",
|
||||||
"LOCK_RESET": "fw-key",
|
"LOCK_RESET": "fw-key",
|
||||||
"WIPE_DATA": "fw-clear"
|
"WIPE_DATA": "fw-delete"
|
||||||
};
|
};
|
||||||
return featureMap[operationCode];
|
return featureMap[operationCode];
|
||||||
};
|
};
|
||||||
@ -1250,7 +1250,7 @@ var operationModule = function () {
|
|||||||
var featureMap = {
|
var featureMap = {
|
||||||
"DEVICE_LOCK": "fw-lock",
|
"DEVICE_LOCK": "fw-lock",
|
||||||
"LOCATION": "fw-map-location",
|
"LOCATION": "fw-map-location",
|
||||||
"ENTERPRISE_WIPE": "fw-clear",
|
"ENTERPRISE_WIPE": "fw-block",
|
||||||
"NOTIFICATION": "fw-message",
|
"NOTIFICATION": "fw-message",
|
||||||
"RING": "fw-dial-up"
|
"RING": "fw-dial-up"
|
||||||
};
|
};
|
||||||
@ -1450,6 +1450,7 @@ var operationModule = function () {
|
|||||||
} else if (operationDataObj.is(":radio")) {
|
} else if (operationDataObj.is(":radio")) {
|
||||||
if (operationDataObj.val() == uiPayload[key]) {
|
if (operationDataObj.val() == uiPayload[key]) {
|
||||||
operationDataObj.attr("checked", true);
|
operationDataObj.attr("checked", true);
|
||||||
|
operationDataObj.trigger("click");
|
||||||
}
|
}
|
||||||
} else if (operationDataObj.is("select")) {
|
} else if (operationDataObj.is("select")) {
|
||||||
operationDataObj.val(value);
|
operationDataObj.val(value);
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 229 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 2.9 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 6.8 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 5.3 KiB |
@ -22,39 +22,12 @@ var InitiateViewOption = null;
|
|||||||
var deviceId = $(".device-id");
|
var deviceId = $(".device-id");
|
||||||
var deviceIdentifier = deviceId.data("deviceid");
|
var deviceIdentifier = deviceId.data("deviceid");
|
||||||
var deviceType = deviceId.data("type");
|
var deviceType = deviceId.data("type");
|
||||||
var payload = [deviceIdentifier];
|
var ownership = deviceId.data("ownership");
|
||||||
var operationTable;
|
var operationTable;
|
||||||
var serviceUrl;
|
|
||||||
|
|
||||||
if (deviceType == "ios") {
|
|
||||||
serviceUrl = "/ios/operation/deviceinfo";
|
|
||||||
} else if (deviceType == "android") {
|
|
||||||
//var serviceUrl = "/mdm-android-agent/operation/device-info";
|
|
||||||
serviceUrl = "/api/device-mgt/android/v1.0/admin/devices/info";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (serviceUrl) {
|
|
||||||
invokerUtil.post(
|
|
||||||
serviceUrl,
|
|
||||||
payload,
|
|
||||||
// success-callback
|
|
||||||
function () {
|
|
||||||
$(".panel-body").show();
|
|
||||||
},
|
|
||||||
// error-callback
|
|
||||||
function () {
|
|
||||||
var defaultInnerHTML =
|
|
||||||
"<br><p class='small'><i class='fw-warning'></i> Device data may not have been updated. Please refresh to try again.<p>";
|
|
||||||
$(".panel-body").append(defaultInnerHTML);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$(".media.tab-responsive [data-toggle=tab]").on("shown.bs.tab", function (e) {
|
$(".media.tab-responsive [data-toggle=tab]").on("shown.bs.tab", function (e) {
|
||||||
var activeTabPane = $(e.target).attr("href");
|
var activeTabPane = $(e.target).attr("href");
|
||||||
var activeListGroupItem = $(".media .list-group-item.active");
|
var activeListGroupItem = $(".media .list-group-item.active");
|
||||||
|
|
||||||
$(activeTabPane).removeClass("visible-xs-block");
|
$(activeTabPane).removeClass("visible-xs-block");
|
||||||
$(activeTabPane).siblings().not(".arrow-left").addClass("visible-xs-block");
|
$(activeTabPane).siblings().not(".arrow-left").addClass("visible-xs-block");
|
||||||
positionArrow(activeListGroupItem);
|
positionArrow(activeListGroupItem);
|
||||||
@ -62,25 +35,21 @@ var InitiateViewOption = null;
|
|||||||
|
|
||||||
$(".media.tab-responsive .tab-content").on("shown.bs.collapse", function (e) {
|
$(".media.tab-responsive .tab-content").on("shown.bs.collapse", function (e) {
|
||||||
var thisParent = $(e.target).parent();
|
var thisParent = $(e.target).parent();
|
||||||
var activeTabPaneCaret = thisParent.find('.caret-updown');
|
var activeTabPaneCaret = thisParent.find(".caret-updown");
|
||||||
var activeTabPaneCaretSiblings = thisParent.siblings().find('.caret-updown');
|
var activeTabPaneCaretSiblings = thisParent.siblings().find(".caret-updown");
|
||||||
|
|
||||||
activeTabPaneCaret.removeClass("fw-up").addClass("fw-down");
|
activeTabPaneCaret.removeClass("fw-up").addClass("fw-down");
|
||||||
activeTabPaneCaretSiblings.removeClass("fw-down").addClass("fw-up");
|
activeTabPaneCaretSiblings.removeClass("fw-down").addClass("fw-up");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$(".media.tab-responsive a[data-toggle='collapse']").on("click", function () {
|
||||||
$('.media.tab-responsive a[data-toggle="collapse"]').on('click',function(){
|
|
||||||
var clickedPanel = $(this).attr('href');
|
var clickedPanel = $(this).attr('href');
|
||||||
|
if ($(clickedPanel).hasClass('in')) {
|
||||||
if($(clickedPanel).hasClass('in')){
|
|
||||||
$(clickedPanel).collapse('hide');
|
$(clickedPanel).collapse('hide');
|
||||||
}else{
|
} else {
|
||||||
$(clickedPanel).collapse('show');
|
$(clickedPanel).collapse('show');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
function positionArrow(selectedTab) {
|
function positionArrow(selectedTab) {
|
||||||
var selectedTabHeight = $(selectedTab).innerHeight();
|
var selectedTabHeight = $(selectedTab).innerHeight();
|
||||||
var arrowPosition = 0;
|
var arrowPosition = 0;
|
||||||
@ -108,30 +77,6 @@ var InitiateViewOption = null;
|
|||||||
$(arrow).css("top", arrowPosition - 10);
|
$(arrow).css("top", arrowPosition - 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
$(document).ready(function() {
|
|
||||||
$(".device-detail-body").removeClass("hidden");
|
|
||||||
$("#loading-content").remove();
|
|
||||||
loadOperationBar(deviceType);
|
|
||||||
loadOperationsLog(false);
|
|
||||||
loadApplicationsList();
|
|
||||||
loadPolicyCompliance();
|
|
||||||
|
|
||||||
$("#refresh-policy").click(function () {
|
|
||||||
$("#policy-spinner").removeClass("hidden");
|
|
||||||
loadPolicyCompliance();
|
|
||||||
});
|
|
||||||
|
|
||||||
$("#refresh-apps").click(function () {
|
|
||||||
$("#apps-spinner").removeClass("hidden");
|
|
||||||
loadApplicationsList();
|
|
||||||
});
|
|
||||||
|
|
||||||
$("#refresh-operations").click(function () {
|
|
||||||
$("#operations-spinner").removeClass("hidden");
|
|
||||||
loadOperationsLog(true);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
function loadOperationsLog(update) {
|
function loadOperationsLog(update) {
|
||||||
var operationsLogTable = "#operations-log-table";
|
var operationsLogTable = "#operations-log-table";
|
||||||
if (update) {
|
if (update) {
|
||||||
@ -273,8 +218,8 @@ var InitiateViewOption = null;
|
|||||||
// success-callback
|
// success-callback
|
||||||
function (data, textStatus, jqXHR) {
|
function (data, textStatus, jqXHR) {
|
||||||
if (jqXHR.status == 200 && data) {
|
if (jqXHR.status == 200 && data) {
|
||||||
data = JSON.parse(data);
|
|
||||||
$("#policy-spinner").addClass("hidden");
|
$("#policy-spinner").addClass("hidden");
|
||||||
|
data = JSON.parse(data);
|
||||||
if (data["active"] == true) {
|
if (data["active"] == true) {
|
||||||
activePolicy = data;
|
activePolicy = data;
|
||||||
invokerUtil.get(
|
invokerUtil.get(
|
||||||
@ -290,42 +235,94 @@ var InitiateViewOption = null;
|
|||||||
if (data["complianceData"]) {
|
if (data["complianceData"]) {
|
||||||
if (data["complianceData"]["complianceFeatures"] &&
|
if (data["complianceData"]["complianceFeatures"] &&
|
||||||
data["complianceData"]["complianceFeatures"].length > 0) {
|
data["complianceData"]["complianceFeatures"].length > 0) {
|
||||||
viewModel["compliance"] = "NON-COMPLIANT";
|
viewModel["complianceStatus"] = "NON-COMPLIANT";
|
||||||
viewModel["complianceFeatures"] = data["complianceData"]["complianceFeatures"];
|
viewModel["complianceFeatures"] = data["complianceData"]["complianceFeatures"];
|
||||||
content = template(viewModel);
|
content = template(viewModel);
|
||||||
$("#policy-list-container").html(content);
|
$("#policy-list-container").html(content);
|
||||||
} else {
|
} else {
|
||||||
viewModel["compliance"] = "COMPLIANT";
|
viewModel["complianceStatus"] = "COMPLIANT";
|
||||||
content = template(viewModel);
|
content = template(viewModel);
|
||||||
$("#policy-list-container").html(content);
|
$("#policy-list-container").html(content);
|
||||||
$("#policy-compliance-table").addClass("hidden");
|
$("#policy-compliance-table").addClass("hidden");
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
$("#policy-list-container").
|
|
||||||
html("<div class='panel-body'><br><p class='fw-warning'> This device " +
|
|
||||||
"has no policy applied.<p></div>");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// error-callback
|
// error-callback
|
||||||
function () {
|
function () {
|
||||||
$("#policy-list-container").
|
$("#policy-list-container").
|
||||||
html("<div class='panel-body'><br><p class='fw-warning'> Loading policy compliance related data " +
|
html("<div class='message message-warning'>" +
|
||||||
"was not successful. please try refreshing data in a while.<p></div>");
|
"<h4 class='remove-margin'>" +
|
||||||
|
"<i class='icon fw fw-warning'></i>" +
|
||||||
|
"Loading policy compliance related data " +
|
||||||
|
"was not successful. please try refreshing in a while." +
|
||||||
|
"</h4>" +
|
||||||
|
"</div>" +
|
||||||
|
"<p class='add-padding-5x'></p>" +
|
||||||
|
"<p class='add-padding-5x'></p>" +
|
||||||
|
"<p class='add-padding-5x'></p>"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
} else if ((jqXHR.status == 200 && !data)) {
|
||||||
|
$("#policy-spinner").addClass("hidden");
|
||||||
|
$("#policy-list-container").
|
||||||
|
html("<div class='message message-info'>" +
|
||||||
|
"<h4 class='remove-margin'>" +
|
||||||
|
"<i class='icon fw fw-info'></i>" +
|
||||||
|
"There is currently no effective policy applied for this device." +
|
||||||
|
"</h4>" +
|
||||||
|
"</div>" +
|
||||||
|
"<p class='add-padding-5x'></p>" +
|
||||||
|
"<p class='add-padding-5x'></p>" +
|
||||||
|
"<p class='add-padding-5x'></p>"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// error-callback
|
// error-callback
|
||||||
function () {
|
function () {
|
||||||
|
$("#policy-spinner").addClass("hidden");
|
||||||
$("#policy-list-container").
|
$("#policy-list-container").
|
||||||
html("<div class='panel-body'><br><p class='fw-warning'> Loading policy compliance related data " +
|
html("<div class='message message-warning'>" +
|
||||||
"was not successful. please try refreshing data in a while.<p></div>");
|
"<h4 class='remove-margin'>" +
|
||||||
|
"<i class='icon fw fw-warning'></i>" +
|
||||||
|
"Loading policy compliance related data " +
|
||||||
|
"was not successful. please try refreshing in a while." +
|
||||||
|
"</h4>" +
|
||||||
|
"</div>" +
|
||||||
|
"<p class='add-padding-5x'></p>" +
|
||||||
|
"<p class='add-padding-5x'></p>" +
|
||||||
|
"<p class='add-padding-5x'></p>"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
$(".device-detail-body").removeClass("hidden");
|
||||||
|
$("#loading-content").remove();
|
||||||
|
loadOperationBar(deviceType, ownership, operationBarModeConstants.SINGLE);
|
||||||
|
loadOperationsLog(false);
|
||||||
|
loadApplicationsList();
|
||||||
|
loadPolicyCompliance();
|
||||||
|
|
||||||
|
$("#refresh-policy").click(function () {
|
||||||
|
$("#policy-spinner").removeClass("hidden");
|
||||||
|
loadPolicyCompliance();
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#refresh-apps").click(function () {
|
||||||
|
$("#apps-spinner").removeClass("hidden");
|
||||||
|
loadApplicationsList();
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#refresh-operations").click(function () {
|
||||||
|
$("#operations-spinner").removeClass("hidden");
|
||||||
|
loadOperationsLog(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
}());
|
}());
|
||||||
|
|||||||
@ -45,7 +45,7 @@ $(document).ready(function () {
|
|||||||
var url = $(this).prop("href");
|
var url = $(this).prop("href");
|
||||||
var hash = url.substring(url.indexOf("#") + 1);
|
var hash = url.substring(url.indexOf("#") + 1);
|
||||||
|
|
||||||
if (hash == "device_location") {
|
if (hash == "device_location_tab") {
|
||||||
if (!map) {
|
if (!map) {
|
||||||
loadLeafletMap();
|
loadLeafletMap();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,29 +1,31 @@
|
|||||||
<div class="wr-app-listing">
|
<div class="wr-app-listing">
|
||||||
<div class="wr-applist">
|
<div class="wr-applist">
|
||||||
{{#each applications}}
|
{{#each applications}}
|
||||||
<a style="text-align: center; width: 110px; height: 140px;">
|
<a style="width: 130px; height: 180px;" class="text-center">
|
||||||
{{#equal platform "android"}}<i class="icon fw fw-android"></i>{{/equal}}
|
|
||||||
{{#equal platform "ios"}}<i class="icon fw fw-apple"></i>{{/equal}}
|
|
||||||
{{#equal platform "windows"}}<i class="icon fw fw-windows"></i>{{/equal}}
|
|
||||||
{{#equal isActive true}}
|
{{#equal isActive true}}
|
||||||
<span style="word-wrap: break-word;">
|
{{#equal platform "android"}}<i class="icon fw fw-android"></i>{{/equal}}
|
||||||
<i class="fw fw-ok icon-success" style="font-size: 14px;"></i>
|
{{#equal platform "ios"}}<i class="icon fw fw-apple"></i>{{/equal}}
|
||||||
Active
|
{{#equal platform "windows"}}<i class="icon fw fw-windows"></i>{{/equal}}
|
||||||
</span>
|
|
||||||
<span style="word-wrap: break-word;"><b>{{name}}</b></span>
|
<span style="word-wrap: break-word;"><b>{{name}}</b></span>
|
||||||
<span style="word-wrap: break-word;"><b>V:{{version}}</b></span>
|
<span style="word-wrap: break-word;"><b>V:{{version}}</b></span>
|
||||||
|
<span style="word-wrap: break-word;" class="text-center">
|
||||||
|
<i class="fw fw-ok icon-success" style="font-size: 14px;"></i>Active
|
||||||
|
</span>
|
||||||
{{#if memoryUsage}}
|
{{#if memoryUsage}}
|
||||||
<span style="word-wrap: break-word;">
|
<span style="word-wrap: break-word;">
|
||||||
Memory Usage
|
Memory Usage
|
||||||
</span>
|
</span>
|
||||||
<span style="word-wrap: break-word;">
|
<span style="word-wrap: break-word;">
|
||||||
( {{memoryUsage}} Bytes )
|
( {{memoryUsage}} Bytes )
|
||||||
</span>
|
</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/equal}}
|
{{/equal}}
|
||||||
{{#equal isActive false}}
|
{{#equal isActive false}}
|
||||||
<span style="word-wrap: break-word;">{{name}}</span>
|
{{#equal platform "android"}}<i class="icon fw fw-android text-muted"></i>{{/equal}}
|
||||||
<span style="word-wrap: break-word;"><b>V:{{version}}</b></span>
|
{{#equal platform "ios"}}<i class="icon fw fw-apple text-muted"></i>{{/equal}}
|
||||||
|
{{#equal platform "windows"}}<i class="icon fw fw-windows text-muted"></i>{{/equal}}
|
||||||
|
<span style="word-wrap: break-word;" class="text-muted">{{name}}</span>
|
||||||
|
<span style="word-wrap: break-word;" class="text-muted"><b>V:{{version}}</b></span>
|
||||||
{{/equal}}
|
{{/equal}}
|
||||||
</a>
|
</a>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
|||||||
@ -1,61 +1,69 @@
|
|||||||
<div class="wr-list-group wr-sortable policy-list">
|
<div class="wr-list-group wr-sortable policy-list">
|
||||||
<span class="list-group-item" id="{{id}}">
|
<span class="list-group-item" id="{{id}}">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-3 clearfix">
|
<div class="col-lg-2 clearfix" style="padding-left: 20px; padding-top: 10px;">
|
||||||
<span class="wr-list-icon">
|
<span class="wr-list-icon">
|
||||||
{{#equal deviceType "android"}}
|
{{#equal deviceType "android"}}
|
||||||
<i class=" fw fw-android"></i>
|
<i class=" fw fw-android"></i>
|
||||||
{{/equal}}
|
{{/equal}}
|
||||||
{{#equal deviceType "ios"}}
|
{{#equal deviceType "ios"}}
|
||||||
<i class=" fw fw-apple"></i>
|
<i class=" fw fw-apple"></i>
|
||||||
{{/equal}}
|
{{/equal}}
|
||||||
{{#equal deviceType "windows"}}
|
{{#equal deviceType "windows"}}
|
||||||
<i class=" fw fw-windows"></i>
|
<i class=" fw fw-windows"></i>
|
||||||
{{/equal}}
|
{{/equal}}
|
||||||
</span>
|
</span>
|
||||||
<span class="wr-list-desc">
|
<span class="wr-list-desc">
|
||||||
<h3 class="wr-list-name">{{policy.policyName}}</h3>
|
<h3 class="wr-list-name">{{policy.policyName}}</h3>
|
||||||
<span class="wr-list-username">{{deviceType}}</span>
|
<span>{{deviceType}}</span>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-7">
|
||||||
<div class="row no-gutter">
|
<div class="row no-gutter">
|
||||||
<div class="wr-desc-list-configs col-lg-4">
|
<div class="wr-desc-list-configs col-lg-4">
|
||||||
<div>
|
<div>
|
||||||
<b>Ownership Type : </b> {{policy.ownershipType}}
|
<b>Ownership Type</b>
|
||||||
|
<br>
|
||||||
|
{{policy.ownershipType}}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="wr-desc-list-configs col-lg-4">
|
||||||
<div class="wr-desc-list-configs col-lg-4">
|
<div>
|
||||||
<div>
|
<b>Compliance Type</b>
|
||||||
<b>Compliance Type :</b> {{policy.compliance}}
|
<br>
|
||||||
|
{{policy.compliance}}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="wr-desc-list-configs col-lg-4">
|
||||||
<div class="wr-desc-list-configs col-lg-4">
|
<div>
|
||||||
<div>
|
<b>Compliance Status</b>
|
||||||
<b>Compliance :</b>
|
<br>
|
||||||
{{#equal compliance "COMPLIANT"}}
|
{{#equal complianceStatus "COMPLIANT"}}
|
||||||
<span><i class="fw fw-ok icon-success"></i> Compliant</span>
|
<span><i class="fw fw-ok icon-success"></i> Compliant</span>
|
||||||
{{/equal}}
|
{{/equal}}
|
||||||
{{#equal compliance "NON-COMPLIANT"}}
|
{{#equal complianceStatus "NON-COMPLIANT"}}
|
||||||
<span><i class="fw fw-warning icon-danger"></i> Not Compliant</span>
|
<span><i class="fw fw-warning icon-danger"></i> Not Compliant</span>
|
||||||
{{/equal}}
|
{{/equal}}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-lg-2">
|
||||||
|
<span class="list-group-item-actions" style="padding-top: 15px;">
|
||||||
|
<!--suppress HtmlUnknownTarget -->
|
||||||
|
<a href="/emm/policy/view?id={{policy.id}}"
|
||||||
|
class="cu-btn-inner policy-view-link"
|
||||||
|
data-id="{{id}}">
|
||||||
|
<span class="fw-stack">
|
||||||
|
<i class="fw fw-ring fw-stack-2x"></i>
|
||||||
|
<i class="fw fw-view fw-stack-1x"></i>
|
||||||
|
</span>
|
||||||
|
View
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-3">
|
</span>
|
||||||
<span class="list-group-item-actions">
|
|
||||||
<a href="/emm/policies/view?id={{policy.id}}" class="cu-btn-inner policy-view-link" data-id="{{id}}">
|
|
||||||
<span class="fw-stack">
|
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
|
||||||
<i class="fw fw-view fw-stack-1x"></i>
|
|
||||||
</span>
|
|
||||||
View
|
|
||||||
</a>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
<table class="table table-striped table-hover table-bordered display data-table" id="policy-compliance-table">
|
<table class="table table-striped table-hover table-bordered display data-table" id="policy-compliance-table">
|
||||||
<thead>
|
<thead>
|
||||||
@ -68,9 +76,9 @@
|
|||||||
{{#each complianceFeatures}}
|
{{#each complianceFeatures}}
|
||||||
<tr data-type="selectable">
|
<tr data-type="selectable">
|
||||||
<td data-display="{{featureCode}}" data-grid-label="Feature Code">{{featureCode}}</td>
|
<td data-display="{{featureCode}}" data-grid-label="Feature Code">{{featureCode}}</td>
|
||||||
<td data-display="{{compliance}}" data-grid-label="Status">
|
<td data-display="{{complianceStatus}}" data-grid-label="Status">
|
||||||
{{#equal compliance true}}<span><i class="fw fw-ok icon-success"></i> Compliant</span>{{/equal}}
|
{{#equal complianceStatus true}}<span><i class="fw fw-ok icon-success"></i> Compliant</span>{{/equal}}
|
||||||
{{#equal compliance false}}<span><i class="fw fw-warning icon-danger"></i> Not Compliant</span>{{/equal}}
|
{{#equal complianceStatus false}}<span><i class="fw fw-warning icon-danger"></i> Not Compliant</span>{{/equal}}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
|||||||
@ -3,16 +3,18 @@
|
|||||||
{{unit "mdm.unit.device.qr-modal"}}
|
{{unit "mdm.unit.device.qr-modal"}}
|
||||||
|
|
||||||
{{#zone "content"}}
|
{{#zone "content"}}
|
||||||
{{#if isAuthorized}}
|
{{#if deviceFound}}
|
||||||
<h1 class="page-sub-title device-id device-select" data-deviceid="{{device.deviceIdentifier}}" data-type="{{device.type}}">
|
{{#if isAuthorized}}
|
||||||
Device {{device.name}}
|
<h1 class="page-sub-title device-id device-select"
|
||||||
{{#if device.viewModel.model}}
|
data-deviceid="{{deviceView.deviceIdentifier}}" data-type="{{deviceView.deviceType}}" data-ownership="{{deviceView.ownership}}">
|
||||||
<span class="lbl-device">
|
Device {{deviceView.name}}
|
||||||
( {{device.viewModel.vendor}} {{device.viewModel.model}} )
|
{{#if deviceView.model}}
|
||||||
|
<span class="lbl-device">
|
||||||
|
( {{deviceView.vendor}} {{deviceView.model}} )
|
||||||
</span>
|
</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</h1>
|
</h1>
|
||||||
<div class="row no-gutter add-padding-5x add-margin-top-5x" style="border: 1px solid #e4e4e4;">
|
<div class="row no-gutter add-padding-5x add-margin-top-5x" style="border: 1px solid #e4e4e4;">
|
||||||
<div class="media">
|
<div class="media">
|
||||||
<div class="media-left media-middle asset-image col-xs-2 col-sm-2 col-md-2 col-lg-2">
|
<div class="media-left media-middle asset-image col-xs-2 col-sm-2 col-md-2 col-lg-2">
|
||||||
<div class="thumbnail icon"><i class="square-element text fw fw-mobile"></i></div>
|
<div class="thumbnail icon"><i class="square-element text fw fw-mobile"></i></div>
|
||||||
@ -22,359 +24,436 @@
|
|||||||
{{#defineZone "device-detail-properties"}}
|
{{#defineZone "device-detail-properties"}}
|
||||||
<table class="table table-responsive table-striped" id="members">
|
<table class="table table-responsive table-striped" id="members">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr role="row" class="even">
|
{{#if deviceView.deviceIdentifier}}
|
||||||
<td class="sorting_1" style="padding:10px 15px; width: 1%;">Device</td>
|
|
||||||
<td style="padding:10px 15px;">{{device.viewModel.vendor}} {{device.properties.model}}</td>
|
|
||||||
</tr>
|
|
||||||
{{#if device.viewModel.model}}
|
|
||||||
<tr role="row" class="odd">
|
<tr role="row" class="odd">
|
||||||
<td class="sorting_1" style="padding:10px 15px;">Model</td>
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Device ID</td>
|
||||||
<td style="padding:10px 15px;">{{device.viewModel.model}}</td>
|
<td style="padding:10px 15px;">{{deviceView.deviceIdentifier}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<tr role="row" class="even">
|
{{#if deviceView.name}}
|
||||||
<td class="sorting_1" style="padding:10px 15px;">IMEI</td>
|
|
||||||
<td style="padding:10px 15px;">{{device.viewModel.imei}}</td>
|
|
||||||
</tr>
|
|
||||||
{{#if device.viewModel.udid}}
|
|
||||||
<tr role="row" class="even">
|
<tr role="row" class="even">
|
||||||
<td class="sorting_1" style="padding:10px 15px;">UDID</td>
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Name</td>
|
||||||
<td style="padding:10px 15px;">{{device.viewModel.udid}}</td>
|
<td style="padding:10px 15px;">{{deviceView.name}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if device.viewModel.os_build_date}}
|
{{#if deviceView.vendor}}
|
||||||
|
{{#if deviceView.model}}
|
||||||
|
<tr role="row" class="odd">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Model</td>
|
||||||
|
<td style="padding:10px 15px;">{{deviceView.vendor}} {{deviceView.model}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.status}}
|
||||||
<tr role="row" class="even">
|
<tr role="row" class="even">
|
||||||
<td class="sorting_1" style="padding:10px 15px;">Firmware Build Date</td>
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Status</td>
|
||||||
<td style="padding:10px 15px;">{{device.viewModel.os_build_date}}</td>
|
<td style="padding:10px 15px;">
|
||||||
|
{{#equal deviceView.status "ACTIVE"}}<span><i class="fw fw-ok icon-success"></i> Active</span>{{/equal}}
|
||||||
|
{{#equal deviceView.status "INACTIVE"}}<span><i class="fw fw-warning icon-warning"></i> Inactive</span>{{/equal}}
|
||||||
|
{{#equal deviceView.status "BLOCKED"}}<span><i class="fw fw-remove icon-danger"></i> Blocked</span>{{/equal}}
|
||||||
|
{{#equal deviceView.status "REMOVED"}}<span><i class="fw fw-delete icon-danger"></i> Removed</span>{{/equal}}
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if device.viewModel.phoneNumber}}
|
{{#if deviceView.owner}}
|
||||||
|
<tr role="row" class="odd">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Owner</td>
|
||||||
|
<td style="padding:10px 15px;">{{deviceView.owner}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.ownership}}
|
||||||
<tr role="row" class="even">
|
<tr role="row" class="even">
|
||||||
<td class="sorting_1" style="padding:10px 15px;">Phone Number</td>
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Ownership</td>
|
||||||
<td style="padding:10px 15px;">{{device.viewModel.phoneNumber}}</td>
|
<td style="padding:10px 15px;">{{deviceView.ownership}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.imei}}
|
||||||
|
<tr role="row" class="even">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">IMEI</td>
|
||||||
|
<td style="padding:10px 15px;">{{deviceView.imei}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.udid}}
|
||||||
|
<tr role="row" class="odd">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">UDID</td>
|
||||||
|
<td style="padding:10px 15px;">{{deviceView.udid}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.osBuildDate}}
|
||||||
|
<tr role="row" class="even">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Firmware Build Date</td>
|
||||||
|
<td style="padding:10px 15px;">{{deviceView.osBuildDate}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.phoneNumber}}
|
||||||
|
<tr role="row" class="odd">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Phone Number</td>
|
||||||
|
<td style="padding:10px 15px;">{{deviceView.phoneNumber}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.lastUpdatedTime}}
|
||||||
|
<tr role="row" class="even">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Last Update</td>
|
||||||
|
<td style="padding:10px 15px;">{{deviceView.lastUpdatedTime}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<tr role="row" class="even">
|
|
||||||
<td class="sorting_1" style="padding:10px 15px;">Status</td>
|
|
||||||
<td style="padding:10px 15px;">
|
|
||||||
{{#equal device.status "ACTIVE"}}<span><i class="fw fw-ok icon-success"></i> Active</span>{{/equal}}
|
|
||||||
{{#equal device.status "INACTIVE"}}<span><i class="fw fw-warning icon-warning"></i> Inactive</span>{{/equal}}
|
|
||||||
{{#equal device.status "BLOCKED"}}<span><i class="fw fw-remove icon-danger"></i> Blocked</span>{{/equal}}
|
|
||||||
{{#equal device.status "REMOVED"}}<span><i class="fw fw-delete icon-danger"></i> Removed</span>{{/equal}}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
{{/defineZone}}
|
{{/defineZone}}
|
||||||
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">Operations</div>
|
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">Operations</div>
|
||||||
<div class="add-margin-top-4x">
|
<div class="add-margin-top-4x">
|
||||||
{{unit "mdm.unit.device.operation-bar" deviceType=device.type}}
|
{{unit "mdm.unit.device.operation-bar" deviceType=deviceView.deviceType ownership=deviceView.ownership}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="media tab-responsive">
|
<div class="media tab-responsive">
|
||||||
<div class="media-left col-xs-1 col-sm-1 col-md-2 col-lg-2 hidden-xs">
|
<div class="media-left col-xs-1 col-sm-1 col-md-2 col-lg-2 hidden-xs">
|
||||||
<ul class="list-group nav nav-pills nav-stacked" role="tablist">
|
<ul class="list-group nav nav-pills nav-stacked" role="tablist">
|
||||||
<li role="presentation" class="list-group-item active">
|
<li role="presentation" class="list-group-item active">
|
||||||
<a href="#device_details_tab" role="tab" data-toggle="tab" aria-controls="device_details_tab">
|
<a href="#device_details_tab" role="tab" data-toggle="tab" aria-controls="device_details_tab">
|
||||||
<i class="icon fw fw-mobile"></i><span class="hidden-sm">Device Details</span>
|
<i class="icon fw fw-mobile"></i><span class="hidden-sm">Device Details</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li role="presentation" class="list-group-item">
|
<li role="presentation" class="list-group-item">
|
||||||
<a href="#policy_compliance_tab" role="tab" data-toggle="tab" aria-controls="policy_compliance_tab">
|
<a href="#policy_compliance_tab" role="tab" data-toggle="tab" aria-controls="policy_compliance_tab">
|
||||||
<i class="icon fw fw-policy"></i><span class="hidden-sm">Policy Compliance</span>
|
<i class="icon fw fw-policy"></i><span class="hidden-sm">Policy Compliance</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li role="presentation" class="list-group-item">
|
<li role="presentation" class="list-group-item">
|
||||||
<a href="#device_location_tab" role="tab" data-toggle="tab"
|
<a href="#device_location_tab" role="tab" data-toggle="tab"
|
||||||
data-lat="{{device.viewModel.location.latitude}}"
|
data-lat="{{deviceView.location.latitude}}"
|
||||||
data-long="{{device.viewModel.location.longitude}}"
|
data-long="{{deviceView.location.longitude}}"
|
||||||
aria-controls="device_location_tab">
|
aria-controls="device_location_tab">
|
||||||
<i class="icon fw fw-map-location"></i><span class="hidden-sm">Device Location</span>
|
<i class="icon fw fw-map-location"></i><span class="hidden-sm">Device Location</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li role="presentation" class="list-group-item">
|
<li role="presentation" class="list-group-item">
|
||||||
<a href="#installed_applications_tab" role="tab" data-toggle="tab" aria-controls="installed_applications_tab">
|
<a href="#installed_applications_tab" role="tab" data-toggle="tab" aria-controls="installed_applications_tab">
|
||||||
<i class="icon fw fw-application"></i><span class="hidden-sm">Installed Applications</span>
|
<i class="icon fw fw-application"></i><span class="hidden-sm">Installed Applications</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li role="presentation" class="list-group-item">
|
<li role="presentation" class="list-group-item">
|
||||||
<a href="#event_log_tab" role="tab" data-toggle="tab" aria-controls="event_log_tab">
|
<a href="#event_log_tab" role="tab" data-toggle="tab" aria-controls="event_log_tab">
|
||||||
<i class="icon fw fw-text"></i><span class="hidden-sm">Operations Log</span>
|
<i class="icon fw fw-text"></i><span class="hidden-sm">Operations Log</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
{{#defineZone "device-detail-properties"}}
|
{{#defineZone "device-detail-properties"}}
|
||||||
<div class="media-body add-padding-left-5x remove-padding-xs">
|
<div class="media-body add-padding-left-5x remove-padding-xs">
|
||||||
<div class="panel-group tab-content remove-padding" id="tabs" role="tablist" aria-multiselectable="true">
|
<div class="panel-group tab-content remove-padding" id="tabs" role="tablist" aria-multiselectable="true">
|
||||||
<div class="arrow-left hidden-xs"></div>
|
<div class="arrow-left hidden-xs"></div>
|
||||||
|
|
||||||
<div class="panel panel-default" role="tabpanel" id="device_details_tab">
|
<div class="panel panel-default" role="tabpanel" id="device_details_tab">
|
||||||
<div class="panel-heading visible-xs collapsed" id="device_details">
|
<div class="panel-heading visible-xs collapsed" id="device_details">
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a role="button" data-toggle="collapse" data-parent="#tabs" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
|
<a role="button" data-toggle="collapse" data-parent="#tabs" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
|
||||||
<i class="fw fw-mobile fw-2x"></i>
|
<i class="fw fw-mobile fw-2x"></i>
|
||||||
Device Details
|
Device Details
|
||||||
<i class="caret-updown fw fw-down"></i>
|
<i class="caret-updown fw fw-down"></i>
|
||||||
</a>
|
</a>
|
||||||
</h4>
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="panel-heading display-none-xs">Device Details</div>
|
||||||
|
<div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="device_details">
|
||||||
|
<div class="panel-body ">
|
||||||
|
<div class="device-detail-body">
|
||||||
|
<!-- device summary -->
|
||||||
|
{{#equal deviceView.deviceType "windows"}}
|
||||||
|
<div class="message message-info">
|
||||||
|
<h4 class="remove-margin"><i class="icon fw fw-info"></i>Not available yet</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-heading display-none-xs">Device Details</div>
|
{{/equal}}
|
||||||
<div id="loading-content" class="col-centered">
|
{{#if deviceView.deviceInfoAvailable}}
|
||||||
<i class="fw fw-settings fw-spin fw-2x"></i> Loading Device Details...
|
{{#if deviceView.BatteryLevel}}
|
||||||
</div>
|
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
|
||||||
<div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="device_details">
|
<div class="col-md-12">
|
||||||
<div class="panel-body ">
|
<div class="wr-stats-board-tile">
|
||||||
<div class="device-detail-body">
|
<div class="tile-name">BATTERY</div>
|
||||||
<!-- device summary -->
|
<div>
|
||||||
{{#equal device.type "windows"}}
|
<div class="tile-icon"><i class="fw fw-battery"></i></div>
|
||||||
<div class="message message-info">
|
<div class="tile-stats">
|
||||||
<h4 class="remove-margin"><i class="icon fw fw-info"></i>Not available yet</h4>
|
{{deviceView.BatteryLevel.value}} %
|
||||||
</div>
|
|
||||||
{{/equal}}
|
|
||||||
{{#if device.viewModel.BatteryLevel}}
|
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
|
|
||||||
<div class="col-md-12">
|
|
||||||
<div class="wr-stats-board-tile">
|
|
||||||
<div class="tile-name">BATTERY</div>
|
|
||||||
<div>
|
|
||||||
<div class="tile-icon"><i class="fw fw-battery"></i></div>
|
|
||||||
<div class="tile-stats">
|
|
||||||
{{device.viewModel.BatteryLevel}} %
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
|
||||||
{{#if device.viewModel.DeviceCapacity}}
|
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
|
|
||||||
<div class="col-md-12">
|
|
||||||
<div class="wr-stats-board-tile">
|
|
||||||
<div class="tile-name">STORAGE</div>
|
|
||||||
<div>
|
|
||||||
<div class="tile-icon"><i class="fw fw-hdd"></i></div>
|
|
||||||
<div class="tile-stats">
|
|
||||||
{{device.viewModel.DeviceCapacityPercentage}} %
|
|
||||||
<span class="tile-stats-free">
|
|
||||||
{{device.viewModel.AvailableDeviceCapacity}} GB Free
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
{{#if device.viewModel.internal_memory.FreeCapacity}}
|
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
|
|
||||||
<div class="col-md-12">
|
|
||||||
<div class="wr-stats-board-tile">
|
|
||||||
<div class="tile-name">LOCAL STORAGE</div>
|
|
||||||
<div>
|
|
||||||
<div class="tile-icon"><i class="fw fw-hdd"></i></div>
|
|
||||||
<div class="tile-stats">
|
|
||||||
{{device.viewModel.internal_memory.DeviceCapacityPercentage}} %
|
|
||||||
<span class="tile-stats-free">
|
|
||||||
{{device.viewModel.internal_memory.FreeCapacity}} GB Free
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
{{#if device.viewModel.external_memory.FreeCapacity}}
|
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
|
|
||||||
<div class="col-md-12">
|
|
||||||
<div class="wr-stats-board-tile">
|
|
||||||
<div class="tile-name">EXTERNAL STORAGE</div>
|
|
||||||
<div>
|
|
||||||
<div class="tile-icon"><i class="fw fw-usb-drive"></i></div>
|
|
||||||
<div class="tile-stats">
|
|
||||||
{{device.viewModel.external_memory.DeviceCapacityPercentage}} %
|
|
||||||
<span class="tile-stats-free">
|
|
||||||
{{device.viewModel.external_memory.FreeCapacity}} GB Free
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="panel panel-default visible-xs-block" role="tabpanel" id="policy_compliance_tab">
|
|
||||||
<div class="panel-heading visible-xs collapsed" id="policy_compliance">
|
|
||||||
<h4 class="panel-title">
|
|
||||||
<a role="button" data-toggle="collapse" data-parent="#tabs" href="#collapseTwo" aria-expanded="true" aria-controls="collapseTwo">
|
|
||||||
<i class="fw fw-policy fw-2x"></i>
|
|
||||||
Policy Compliance
|
|
||||||
<i class="caret-updown fw fw-down"></i>
|
|
||||||
</a>
|
|
||||||
</h4>
|
|
||||||
</div>
|
|
||||||
<div class="panel-heading display-none-xs">
|
|
||||||
Policy Compliance
|
|
||||||
<span>
|
|
||||||
<a href="javascript:void(0);" id="refresh-policy">
|
|
||||||
<i class="fw fw-refresh"></i>
|
|
||||||
</a>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div id="collapseTwo" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="policy_compliance">
|
|
||||||
<div class="panel-body ">
|
|
||||||
<span class="visible-xs add-padding-2x text-right">
|
|
||||||
<a href="javascript:void(0);" id="refresh-policy">
|
|
||||||
<i class="fw fw-refresh"></i>
|
|
||||||
</a>
|
|
||||||
</span>
|
|
||||||
<div id="policy-spinner" class="wr-advance-operations-init hidden">
|
|
||||||
<i class="fw fw-settings fw-spin fw-2x"></i> Loading Policy Compliance...
|
|
||||||
</div>
|
|
||||||
<div id="policy-list-container">
|
|
||||||
<div class="message message-info">
|
|
||||||
<h4 class="remove-margin"><i class="icon fw fw-info"></i>There is no active policy for this device.</h4>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{{/if}}
|
||||||
</div>
|
<!--{{#if deviceView.cpuUsage}}-->
|
||||||
<div class="panel panel-default visible-xs-block" role="tabpanel" id="device_location_tab">
|
<!--<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">-->
|
||||||
<div class="panel-heading visible-xs collapsed" id="device_location">
|
<!--<div class="col-md-12">-->
|
||||||
<h4 class="panel-title">
|
<!--<div class="wr-stats-board-tile">-->
|
||||||
<a role="button" data-toggle="collapse" data-parent="#tabs" href="#collapseThree" aria-expanded="true" aria-controls="collapseThree">
|
<!--<div class="tile-name">CPU Usage</div>-->
|
||||||
<i class="fw fw-map-location fw-2x"></i>
|
<!--<div>-->
|
||||||
Device Location
|
<!--<div class="tile-icon"><i class="fw fw-dashboard"></i></div>-->
|
||||||
<i class="caret-updown fw fw-down"></i>
|
<!--<div class="tile-stats">-->
|
||||||
</a>
|
<!--{{deviceView.cpuUsage.value}} %-->
|
||||||
</h4>
|
<!--</div>-->
|
||||||
</div>
|
<!--</div>-->
|
||||||
<div class="panel-heading display-none-xs">Device Location</div>
|
<!--</div>-->
|
||||||
<div id="collapseThree" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="device_location">
|
<!--</div>-->
|
||||||
<div class="panel-body">
|
<!--</div>-->
|
||||||
<div id="map-error" class="message message-danger">
|
<!--{{/if}}-->
|
||||||
<h4 class="remove-margin"><i class="icon fw fw-error"></i>Device location cannot be retrieved.</h4>
|
{{#if deviceView.ramUsage}}
|
||||||
</div>
|
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
|
||||||
<div id="device-location"
|
<div class="col-md-12">
|
||||||
data-lat="{{device.viewModel.location.latitude}}"
|
<div class="wr-stats-board-tile">
|
||||||
data-long="{{device.viewModel.location.longitude}}">
|
<div class="tile-name">RAM Usage</div>
|
||||||
</div>
|
<div>
|
||||||
</div>
|
<div class="tile-icon"><i class="fw fw-hardware"></i></div>
|
||||||
</div>
|
<div class="tile-stats">
|
||||||
</div>
|
{{deviceView.ramUsage.value}} %
|
||||||
<div class="panel panel-default visible-xs-block" role="tabpanel" id="installed_applications_tab">
|
</div>
|
||||||
<div class="panel-heading visible-xs collapsed" id="installed_applications">
|
</div>
|
||||||
<h4 class="panel-title">
|
|
||||||
<a role="button" data-toggle="collapse" data-parent="#tabs" href="#collapseFour" aria-expanded="true" aria-controls="collapseFour">
|
|
||||||
<i class="fw fw-application fw-2x"></i>
|
|
||||||
Installed Applications
|
|
||||||
<i class="caret-updown fw fw-down"></i>
|
|
||||||
</a>
|
|
||||||
</h4>
|
|
||||||
</div>
|
|
||||||
<div class="panel-heading display-none-xs">
|
|
||||||
Installed Applications
|
|
||||||
<span>
|
|
||||||
<a href="javascript:void(0);" id="refresh-apps">
|
|
||||||
<i class="fw fw-refresh"></i>
|
|
||||||
</a>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div id="collapseFour" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="installed_applications">
|
|
||||||
<div class="panel-body ">
|
|
||||||
<span class="visible-xs add-padding-2x text-right">
|
|
||||||
<a href="javascript:void(0);" id="refresh-apps">
|
|
||||||
<i class="fw fw-refresh"></i>
|
|
||||||
</a>
|
|
||||||
</span>
|
|
||||||
<div id="apps-spinner" class="wr-advance-operations-init hidden">
|
|
||||||
<i class="fw fw-settings fw-spin fw-2x"></i> Loading Applications List...
|
|
||||||
</div>
|
|
||||||
<div id="applications-list-container">
|
|
||||||
<div class="message message-info">
|
|
||||||
<h4><i class="icon fw fw-info"></i>No applications found.</h4>
|
|
||||||
<p>Please try refreshing the list in a while.</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{{/if}}
|
||||||
</div>
|
{{#if deviceView.internalMemory}}
|
||||||
<div class="panel panel-default visible-xs-block" role="tabpanel" id="event_log_tab">
|
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
|
||||||
<div class="panel-heading visible-xs collapsed" id="event_log">
|
<div class="col-md-12">
|
||||||
<h4 class="panel-title">
|
<div class="wr-stats-board-tile">
|
||||||
<a role="button" data-toggle="collapse" data-parent="#tabs" href="#collapseFive" aria-expanded="true" aria-controls="collapseFive">
|
<div class="tile-name">Local Storage</div>
|
||||||
<i class="fw fw-text fw-2x"></i>
|
<div>
|
||||||
Operations Logs
|
<div class="tile-icon"><i class="fw fw-hdd"></i></div>
|
||||||
<i class="caret-updown fw fw-down"></i>
|
<div class="tile-stats">
|
||||||
</a>
|
{{deviceView.internalMemory.usage}} %
|
||||||
|
<span class="tile-stats-free">
|
||||||
|
TOTAL OF {{deviceView.internalMemory.total}} GB
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
{{#if deviceView.externalMemory}}
|
||||||
|
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="wr-stats-board-tile">
|
||||||
|
<div class="tile-name">External Storage</div>
|
||||||
|
<div>
|
||||||
|
<div class="tile-icon"><i class="fw fw-usb-drive"></i></div>
|
||||||
|
<div class="tile-stats">
|
||||||
|
{{deviceView.externalMemory.usage}} %
|
||||||
|
<span class="tile-stats-free">
|
||||||
|
TOTAL OF {{deviceView.externalMemory.total}} GB
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
{{else}}
|
||||||
|
<div class="message message-info">
|
||||||
|
<h4 class="remove-margin">
|
||||||
|
<i class="icon fw fw-info"></i>
|
||||||
|
Battery, RAM and Storage related information are not available yet.
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-heading display-none-xs">
|
{{/if}}
|
||||||
Operations Logs
|
</div>
|
||||||
<span>
|
</div>
|
||||||
<a href="javascript:void(0);" id="refresh-operations">
|
</div>
|
||||||
<i class="fw fw-refresh"></i>
|
</div>
|
||||||
</a>
|
<div class="panel panel-default visible-xs-block" role="tabpanel" id="policy_compliance_tab">
|
||||||
</span>
|
<div class="panel-heading visible-xs collapsed" id="policy_compliance">
|
||||||
</div>
|
<h4 class="panel-title">
|
||||||
<div id="collapseFive" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="event_log">
|
<a role="button"
|
||||||
<div class="panel-body">
|
data-toggle="collapse" data-parent="#tabs" href="#collapseTwo" aria-expanded="true" aria-controls="collapseTwo">
|
||||||
|
<i class="fw fw-policy fw-2x"></i>
|
||||||
|
Policy Compliance
|
||||||
|
<i class="caret-updown fw fw-down"></i>
|
||||||
|
</a>
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="panel-heading display-none-xs">
|
||||||
|
Policy Compliance
|
||||||
|
|
||||||
|
<span>
|
||||||
|
<a href="javascript:void(0);" id="refresh-policy">
|
||||||
|
<i class="fw fw-refresh"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div id="collapseTwo" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="policy_compliance">
|
||||||
|
<div class="panel-body ">
|
||||||
|
<span class="visible-xs add-padding-2x text-right">
|
||||||
|
<a href="javascript:void(0);" id="refresh-policy">
|
||||||
|
<i class="fw fw-refresh"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
<div id="policy-spinner"
|
||||||
|
class="wr-advance-operations-init add-padding-bottom-2x add-padding-bottom-4x hidden">
|
||||||
|
<i class="fw fw-settings fw-spin fw-2x"></i> Loading Policy Compliance...
|
||||||
|
</div>
|
||||||
|
<div id="policy-list-container">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-default visible-xs-block" role="tabpanel" id="device_location_tab">
|
||||||
|
<div class="panel-heading visible-xs collapsed" id="device_location">
|
||||||
|
<h4 class="panel-title">
|
||||||
|
<a role="button" data-toggle="collapse" data-parent="#tabs" href="#collapseThree" aria-expanded="true" aria-controls="collapseThree">
|
||||||
|
<i class="fw fw-map-location fw-2x"></i>
|
||||||
|
Device Location
|
||||||
|
<i class="caret-updown fw fw-down"></i>
|
||||||
|
</a>
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="panel-heading display-none-xs">Device Location</div>
|
||||||
|
<div id="collapseThree" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="device_location">
|
||||||
|
<div class="panel-body">
|
||||||
|
{{#if deviceView.location}}
|
||||||
|
<div id="device-location"
|
||||||
|
data-lat="{{deviceView.location.latitude}}"
|
||||||
|
data-long="{{deviceView.location.longitude}}">
|
||||||
|
</div>
|
||||||
|
{{else}}
|
||||||
|
<div id="map-error" class="message message-warning">
|
||||||
|
<h4 class="remove-margin">
|
||||||
|
<i class="icon fw fw-warning"></i>
|
||||||
|
Device location information is not available.
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<p class="add-padding-5x"></p>
|
||||||
|
<p class="add-padding-5x"></p>
|
||||||
|
<p class="add-padding-5x"></p>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-default visible-xs-block" role="tabpanel" id="installed_applications_tab">
|
||||||
|
<div class="panel-heading visible-xs collapsed" id="installed_applications">
|
||||||
|
<h4 class="panel-title">
|
||||||
|
<a role="button" data-toggle="collapse" data-parent="#tabs" href="#collapseFour" aria-expanded="true" aria-controls="collapseFour">
|
||||||
|
<i class="fw fw-application fw-2x"></i>
|
||||||
|
Installed Applications
|
||||||
|
<i class="caret-updown fw fw-down"></i>
|
||||||
|
</a>
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="panel-heading display-none-xs">
|
||||||
|
Installed Applications
|
||||||
|
|
||||||
|
<span>
|
||||||
|
<a href="javascript:void(0);" id="refresh-apps">
|
||||||
|
<i class="fw fw-refresh"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div id="collapseFour" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="installed_applications">
|
||||||
|
<div class="panel-body">
|
||||||
|
<span class="visible-xs add-padding-2x text-right">
|
||||||
|
<a href="javascript:void(0);" id="refresh-apps">
|
||||||
|
<i class="fw fw-refresh"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
<div id="apps-spinner" class="wr-advance-operations-init hidden">
|
||||||
|
<i class="fw fw-settings fw-spin fw-2x"></i> Loading Applications List...
|
||||||
|
</div>
|
||||||
|
<div id="applications-list-container">
|
||||||
|
<div class="message message-info">
|
||||||
|
<h4>
|
||||||
|
<i class="icon fw fw-info"></i>
|
||||||
|
No applications found.
|
||||||
|
</h4>
|
||||||
|
<p>Please try refreshing in a while.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-default visible-xs-block" role="tabpanel" id="event_log_tab">
|
||||||
|
<div class="panel-heading visible-xs collapsed" id="event_log">
|
||||||
|
<h4 class="panel-title">
|
||||||
|
<a role="button" data-toggle="collapse" data-parent="#tabs" href="#collapseFive" aria-expanded="true" aria-controls="collapseFive">
|
||||||
|
<i class="fw fw-text fw-2x"></i>
|
||||||
|
Operations Log
|
||||||
|
<i class="caret-updown fw fw-down"></i>
|
||||||
|
</a>
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="panel-heading display-none-xs">
|
||||||
|
Operations Log
|
||||||
|
|
||||||
|
<span>
|
||||||
|
<a href="javascript:void(0);" id="refresh-operations">
|
||||||
|
<i class="fw fw-refresh"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div id="collapseFive" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="event_log">
|
||||||
|
<div class="panel-body">
|
||||||
<span class="visible-xs add-padding-2x text-right">
|
<span class="visible-xs add-padding-2x text-right">
|
||||||
<a href="javascript:void(0);" id="refresh-operations">
|
<a href="javascript:void(0);" id="refresh-operations">
|
||||||
<i class="fw fw-refresh"></i>
|
<i class="fw fw-refresh"></i>
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
<div id="operations-spinner" class="wr-advance-operations-init hidden">
|
<div id="operations-spinner" class="wr-advance-operations-init hidden">
|
||||||
<i class="fw fw-settings fw-spin fw-2x"></i> Loading Operations Log...
|
<i class="fw fw-settings fw-spin fw-2x"></i> Loading Operations Log...
|
||||||
</div>
|
</div>
|
||||||
<div id="operations-log-container">
|
<div id="operations-log-container">
|
||||||
<div class="message message-info">
|
<div class="message message-info">
|
||||||
<h4 class="remove-margin"><i class="icon fw fw-info"></i>There are no operations, performed yet on this device.</h4>
|
<h4 class="remove-margin">
|
||||||
</div>
|
<i class="icon fw fw-info"></i>
|
||||||
</div>
|
There are no operations, performed yet on this device.
|
||||||
<table class="table table-striped table-hover table-bordered display data-table" id="operations-log-table">
|
</h4>
|
||||||
<thead>
|
|
||||||
<tr class="sort-row">
|
|
||||||
<th>Operation Code</th>
|
|
||||||
<th>Status</th>
|
|
||||||
<th>Request created at</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<table class="table table-striped table-hover table-bordered display data-table" id="operations-log-table">
|
||||||
|
<thead>
|
||||||
|
<tr class="sort-row">
|
||||||
|
<th>Operation Code</th>
|
||||||
|
<th>Status</th>
|
||||||
|
<th>Request created at</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
</div>
|
</div>
|
||||||
{{/defineZone}}
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/defineZone}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{else}}
|
||||||
|
<h1 class="page-sub-title">
|
||||||
|
Permission Denied
|
||||||
|
</h1>
|
||||||
|
<br>
|
||||||
|
You are not authorized to view specified device in the system.
|
||||||
|
{{/if}}
|
||||||
{{else}}
|
{{else}}
|
||||||
<h1 class="page-sub-title">
|
<h1 class="page-sub-title">
|
||||||
Permission Denied
|
Device not found
|
||||||
</h1>
|
</h1>
|
||||||
<br>
|
<br>
|
||||||
You are not authorized to view specified device in the system.
|
You have tried to access either a removed or non-existing device.
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/zone}}
|
{{/zone}}
|
||||||
{{#zone "bottomJs"}}
|
{{#zone "bottomJs"}}
|
||||||
{{#if isAuthorized}}
|
{{#if isAuthorized}}
|
||||||
<script id="policy-view" src="{{@unit.publicUri}}/templates/policy-compliance.hbs"
|
<!--suppress HtmlUnknownTarget -->
|
||||||
data-device-id="{{device.deviceIdentifier}}" data-device-type="{{device.type}}"
|
<script id="policy-view" src="{{@unit.publicUri}}/templates/policy-compliance.hbs"
|
||||||
type="text/x-handlebars-template"></script>
|
data-device-id="{{deviceView.deviceIdentifier}}" data-device-type="{{deviceView.deviceType}}"
|
||||||
<script id="applications-list" src="{{@unit.publicUri}}/templates/applications-list.hbs"
|
type="text/x-handlebars-template"></script>
|
||||||
data-device-id="{{device.deviceIdentifier}}" data-device-type="{{device.type}}"
|
<!--suppress HtmlUnknownTarget -->
|
||||||
type="text/x-handlebars-template"></script>
|
<script id="applications-list" src="{{@unit.publicUri}}/templates/applications-list.hbs"
|
||||||
<script id="operations-log" src="{{@unit.publicUri}}/templates/operations-log.hbs"
|
data-device-id="{{deviceView.deviceIdentifier}}" data-device-type="{{deviceView.deviceType}}"
|
||||||
data-device-id="{{device.deviceIdentifier}}" data-device-type="{{device.type}}"
|
type="text/x-handlebars-template"></script>
|
||||||
type="text/x-handlebars-template"></script>
|
<!--suppress HtmlUnknownTarget -->
|
||||||
{{js "js/device-detail.js"}}
|
<script id="operations-log" src="{{@unit.publicUri}}/templates/operations-log.hbs"
|
||||||
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
|
data-device-id="{{deviceView.deviceIdentifier}}" data-device-type="{{deviceView.deviceType}}"
|
||||||
{{js "js/load-map.js"}}
|
type="text/x-handlebars-template"></script>
|
||||||
|
{{js "js/device-detail.js"}}
|
||||||
|
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
|
||||||
|
{{js "js/load-map.js"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/zone}}
|
{{/zone}}
|
||||||
@ -18,88 +18,183 @@
|
|||||||
|
|
||||||
function onRequest(context) {
|
function onRequest(context) {
|
||||||
// var log = new Log("view.js");
|
// var log = new Log("view.js");
|
||||||
var deviceType = context.uriParams.deviceType;
|
var deviceType = context["uriParams"]["deviceType"];
|
||||||
var deviceId = request.getParameter("id");
|
var deviceId = request.getParameter("id");
|
||||||
var deviceData = {};
|
var deviceViewData = {};
|
||||||
|
|
||||||
if (deviceType && deviceId) {
|
if (deviceType && deviceId) {
|
||||||
var deviceModule = require("/app/modules/business-controllers/device.js")["deviceModule"];
|
var deviceModule = require("/app/modules/business-controllers/device.js")["deviceModule"];
|
||||||
var response = deviceModule.viewDevice(deviceType, deviceId);
|
var response = deviceModule.viewDevice(deviceType, deviceId);
|
||||||
if (response["status"] == "success") {
|
if (response["status"] == "success") {
|
||||||
deviceData["isAuthorized"] = true;
|
deviceViewData["deviceFound"] = true;
|
||||||
|
deviceViewData["isAuthorized"] = true;
|
||||||
|
|
||||||
var device = response["content"];
|
var filteredDeviceData = response["content"];
|
||||||
|
|
||||||
|
// creating deviceView information model from filtered device data
|
||||||
var viewModel = {};
|
var viewModel = {};
|
||||||
var deviceInfo = device["properties"]["DEVICE_INFO"];
|
if (filteredDeviceData["type"]) {
|
||||||
if (deviceInfo && String(deviceInfo.toString()).length > 0) {
|
viewModel["deviceType"] = filteredDeviceData["type"];
|
||||||
deviceInfo = parse(stringify(deviceInfo));
|
}
|
||||||
if (device["type"] == "ios") {
|
if (filteredDeviceData["deviceIdentifier"]) {
|
||||||
deviceInfo = parse(deviceInfo);
|
viewModel["deviceIdentifier"] = filteredDeviceData["deviceIdentifier"];
|
||||||
viewModel["imei"] = device["properties"]["IMEI"];
|
}
|
||||||
viewModel["phoneNumber"] = deviceInfo["PhoneNumber"];
|
if (filteredDeviceData["name"]) {
|
||||||
viewModel["udid"] = deviceInfo["UDID"];
|
viewModel["name"] = filteredDeviceData["name"];
|
||||||
viewModel["BatteryLevel"] = Math.round(deviceInfo["BatteryLevel"] * 100);
|
}
|
||||||
viewModel["DeviceCapacity"] = Math.round(deviceInfo["DeviceCapacity"] * 100) / 100;
|
if (filteredDeviceData["enrolmentInfo"]) {
|
||||||
viewModel["AvailableDeviceCapacity"] = Math.
|
if (filteredDeviceData["enrolmentInfo"]["status"]) {
|
||||||
round(deviceInfo["AvailableDeviceCapacity"] * 100) / 100;
|
viewModel["status"] = filteredDeviceData["enrolmentInfo"]["status"];
|
||||||
viewModel["DeviceCapacityUsed"] = Math.
|
}
|
||||||
round((viewModel["DeviceCapacity"] - viewModel["AvailableDeviceCapacity"]) * 100) / 100;
|
if (filteredDeviceData["enrolmentInfo"]["owner"]) {
|
||||||
viewModel["DeviceCapacityPercentage"] = Math.
|
viewModel["owner"] = filteredDeviceData["enrolmentInfo"]["owner"];
|
||||||
round(viewModel["AvailableDeviceCapacity"] / viewModel["DeviceCapacity"] * 10000) / 100;
|
}
|
||||||
viewModel["location"] = {
|
if (filteredDeviceData["enrolmentInfo"]["ownership"]) {
|
||||||
latitude: device["properties"]["LATITUDE"],
|
viewModel["ownership"] = filteredDeviceData["enrolmentInfo"]["ownership"];
|
||||||
longitude: device["properties"]["LONGITUDE"]
|
}
|
||||||
};
|
}
|
||||||
} else if (device["type"] == "android") {
|
if (filteredDeviceData["initialDeviceInfo"]) {
|
||||||
viewModel["imei"] = device["properties"]["IMEI"];
|
viewModel["deviceInfoAvailable"] = true;
|
||||||
viewModel["model"] = device["properties"]["DEVICE_MODEL"];
|
if (filteredDeviceData["initialDeviceInfo"]["IMEI"]) {
|
||||||
viewModel["vendor"] = device["properties"]["VENDOR"];
|
viewModel["imei"] = filteredDeviceData["initialDeviceInfo"]["IMEI"];
|
||||||
var osBuildDate = device["properties"]["OS_BUILD_DATE"];
|
}
|
||||||
if (osBuildDate != null && osBuildDate != "0") {
|
if (!filteredDeviceData["latestDeviceInfo"]) {
|
||||||
viewModel["os_build_date"] = new Date(osBuildDate * 1000);
|
if (filteredDeviceData["initialDeviceInfo"]["OS_BUILD_DATE"]) {
|
||||||
}
|
if (filteredDeviceData["initialDeviceInfo"]["OS_BUILD_DATE"] != "0") {
|
||||||
viewModel["internal_memory"] = {};
|
viewModel["osBuildDate"] = new Date(filteredDeviceData["initialDeviceInfo"]["OS_BUILD_DATE"] * 1000);
|
||||||
viewModel["external_memory"] = {};
|
}
|
||||||
viewModel["location"] = {
|
}
|
||||||
latitude: device["properties"]["LATITUDE"],
|
if (filteredDeviceData["initialDeviceInfo"]["LATITUDE"] && filteredDeviceData["initialDeviceInfo"]["LONGITUDE"]) {
|
||||||
longitude: device["properties"]["LONGITUDE"]
|
viewModel["location"] = {};
|
||||||
};
|
viewModel["location"]["latitude"] = filteredDeviceData["initialDeviceInfo"]["LATITUDE"];
|
||||||
var info = {};
|
viewModel["location"]["longitude"] = filteredDeviceData["initialDeviceInfo"]["LONGITUDE"];
|
||||||
var infoList = parse(deviceInfo);
|
}
|
||||||
if (infoList != null && infoList != undefined) {
|
if (filteredDeviceData["initialDeviceInfo"]["VENDOR"] && filteredDeviceData["initialDeviceInfo"]["DEVICE_MODEL"]) {
|
||||||
for (var j = 0; j < infoList.length; j++) {
|
viewModel["vendor"] = filteredDeviceData["initialDeviceInfo"]["VENDOR"];
|
||||||
info[infoList[j].name] = infoList[j].value;
|
viewModel["model"] = filteredDeviceData["initialDeviceInfo"]["DEVICE_MODEL"];
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]) {
|
||||||
|
if (deviceType == "android") {
|
||||||
|
viewModel["BatteryLevel"] = {};
|
||||||
|
viewModel["BatteryLevel"]["value"] = filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["BATTERY_LEVEL"];
|
||||||
|
|
||||||
|
viewModel["internalMemory"] = {};
|
||||||
|
viewModel["internalMemory"]["total"] = Math.
|
||||||
|
round(filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["INTERNAL_TOTAL_MEMORY"] * 100) / 100;
|
||||||
|
if (filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["INTERNAL_TOTAL_MEMORY"] != 0) {
|
||||||
|
viewModel["internalMemory"]["usage"] = Math.
|
||||||
|
round((filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["INTERNAL_TOTAL_MEMORY"] -
|
||||||
|
filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["INTERNAL_AVAILABLE_MEMORY"])
|
||||||
|
/ filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["INTERNAL_TOTAL_MEMORY"] * 10000) / 100;
|
||||||
|
} else {
|
||||||
|
viewModel["internalMemory"]["usage"] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
viewModel["externalMemory"] = {};
|
||||||
|
viewModel["externalMemory"]["total"] = Math.
|
||||||
|
round(filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["EXTERNAL_TOTAL_MEMORY"] * 100) / 100;
|
||||||
|
if (filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["EXTERNAL_TOTAL_MEMORY"] != 0) {
|
||||||
|
viewModel["externalMemory"]["usage"] = Math.
|
||||||
|
round((filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["EXTERNAL_TOTAL_MEMORY"] -
|
||||||
|
filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["EXTERNAL_AVAILABLE_MEMORY"])
|
||||||
|
/ filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["EXTERNAL_TOTAL_MEMORY"] * 10000) / 100;
|
||||||
|
} else {
|
||||||
|
viewModel["externalMemory"]["usage"] = 0;
|
||||||
|
}
|
||||||
|
} else if (deviceType == "ios") {
|
||||||
|
viewModel["BatteryLevel"] = {};
|
||||||
|
viewModel["BatteryLevel"]["value"] = filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["BatteryLevel"];
|
||||||
|
|
||||||
|
viewModel["internalMemory"] = {};
|
||||||
|
viewModel["internalMemory"]["total"] = Math.
|
||||||
|
round(filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["DeviceCapacity"] * 100) / 100;
|
||||||
|
if (filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["DeviceCapacity"] != 0) {
|
||||||
|
viewModel["internalMemory"]["usage"] = Math.
|
||||||
|
round((filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["DeviceCapacity"] -
|
||||||
|
filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["AvailableDeviceCapacity"])
|
||||||
|
/ filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["DeviceCapacity"] * 10000) / 100;
|
||||||
|
} else {
|
||||||
|
viewModel["internalMemory"]["usage"] = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
deviceInfo = info;
|
|
||||||
viewModel["BatteryLevel"] = deviceInfo["BATTERY_LEVEL"];
|
|
||||||
viewModel["internal_memory"]["FreeCapacity"] = Math.
|
|
||||||
round(deviceInfo["INTERNAL_AVAILABLE_MEMORY"] * 100)/100;
|
|
||||||
viewModel["internal_memory"]["DeviceCapacityPercentage"] = Math.
|
|
||||||
round(deviceInfo["INTERNAL_AVAILABLE_MEMORY"]
|
|
||||||
/ deviceInfo["INTERNAL_TOTAL_MEMORY"] * 10000) / 100;
|
|
||||||
viewModel["external_memory"]["FreeCapacity"] = Math.
|
|
||||||
round(deviceInfo["EXTERNAL_AVAILABLE_MEMORY"] * 100) / 100;
|
|
||||||
viewModel["external_memory"]["DeviceCapacityPercentage"] = Math.
|
|
||||||
round(deviceInfo["EXTERNAL_AVAILABLE_MEMORY"]
|
|
||||||
/ deviceInfo["EXTERNAL_TOTAL_MEMORY"] * 10000) / 100;
|
|
||||||
} else if (device["type"] == "windows") {
|
|
||||||
viewModel["imei"] = device["properties"]["IMEI"];
|
|
||||||
viewModel["model"] = device["properties"]["DEVICE_MODEL"];
|
|
||||||
viewModel["vendor"] = device["properties"]["VENDOR"];
|
|
||||||
viewModel["internal_memory"] = {};
|
|
||||||
viewModel["external_memory"] = {};
|
|
||||||
viewModel["location"] = {
|
|
||||||
latitude: device["properties"]["LATITUDE"],
|
|
||||||
longitude: device["properties"]["LONGITUDE"]
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
device["viewModel"] = viewModel;
|
|
||||||
}
|
}
|
||||||
deviceData["device"] = device;
|
if (filteredDeviceData["latestDeviceInfo"]) {
|
||||||
|
viewModel["deviceInfoAvailable"] = true;
|
||||||
|
if (filteredDeviceData["latestDeviceInfo"]["osBuildDate"]) {
|
||||||
|
if (filteredDeviceData["latestDeviceInfo"]["osBuildDate"] != "0") {
|
||||||
|
viewModel["osBuildDate"] = new Date(filteredDeviceData["latestDeviceInfo"]["osBuildDate"] * 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["latestDeviceInfo"]["location"]["latitude"] &&
|
||||||
|
filteredDeviceData["latestDeviceInfo"]["location"]["longitude"]) {
|
||||||
|
viewModel["location"] = {};
|
||||||
|
viewModel["location"]["latitude"] = filteredDeviceData["latestDeviceInfo"]["location"]["latitude"];
|
||||||
|
viewModel["location"]["longitude"] = filteredDeviceData["latestDeviceInfo"]["location"]["longitude"];
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["latestDeviceInfo"]["vendor"] && filteredDeviceData["latestDeviceInfo"]["deviceModel"]) {
|
||||||
|
viewModel["vendor"] = filteredDeviceData["latestDeviceInfo"]["vendor"];
|
||||||
|
viewModel["model"] = filteredDeviceData["latestDeviceInfo"]["deviceModel"];
|
||||||
|
}
|
||||||
|
if (filteredDeviceData["latestDeviceInfo"]["updatedTime"]) {
|
||||||
|
viewModel["lastUpdatedTime"] = filteredDeviceData["latestDeviceInfo"]["updatedTime"].
|
||||||
|
substr(0, filteredDeviceData["latestDeviceInfo"]["updatedTime"].indexOf("+"));
|
||||||
|
}
|
||||||
|
viewModel["BatteryLevel"] = {};
|
||||||
|
viewModel["BatteryLevel"]["value"] = filteredDeviceData["latestDeviceInfo"]["batteryLevel"];
|
||||||
|
|
||||||
|
viewModel["cpuUsage"] = {};
|
||||||
|
viewModel["cpuUsage"]["value"] = filteredDeviceData["latestDeviceInfo"]["cpuUsage"];
|
||||||
|
|
||||||
|
viewModel["ramUsage"] = {};
|
||||||
|
if (filteredDeviceData["latestDeviceInfo"]["totalRAMMemory"] != 0) {
|
||||||
|
viewModel["ramUsage"]["value"] = Math.
|
||||||
|
round((filteredDeviceData["latestDeviceInfo"]["totalRAMMemory"] -
|
||||||
|
filteredDeviceData["latestDeviceInfo"]["availableRAMMemory"])
|
||||||
|
/ filteredDeviceData["latestDeviceInfo"]["totalRAMMemory"] * 10000) / 100;
|
||||||
|
} else {
|
||||||
|
viewModel["ramUsage"]["value"] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
viewModel["internalMemory"] = {};
|
||||||
|
viewModel["internalMemory"]["total"] = Math.
|
||||||
|
round(filteredDeviceData["latestDeviceInfo"]["internalTotalMemory"] * 100) / 100;
|
||||||
|
if (filteredDeviceData["latestDeviceInfo"]["internalTotalMemory"] != 0) {
|
||||||
|
viewModel["internalMemory"]["usage"] = Math.
|
||||||
|
round((filteredDeviceData["latestDeviceInfo"]["internalTotalMemory"] -
|
||||||
|
filteredDeviceData["latestDeviceInfo"]["internalAvailableMemory"])
|
||||||
|
/ filteredDeviceData["latestDeviceInfo"]["internalTotalMemory"] * 10000) / 100;
|
||||||
|
} else {
|
||||||
|
viewModel["internalMemory"]["usage"] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
viewModel["externalMemory"] = {};
|
||||||
|
viewModel["externalMemory"]["total"] = Math.
|
||||||
|
round(filteredDeviceData["latestDeviceInfo"]["externalTotalMemory"] * 100) / 100;
|
||||||
|
if (filteredDeviceData["latestDeviceInfo"]["externalTotalMemory"] != 0) {
|
||||||
|
viewModel["externalMemory"]["usage"] = Math.
|
||||||
|
round((filteredDeviceData["latestDeviceInfo"]["externalTotalMemory"] -
|
||||||
|
filteredDeviceData["latestDeviceInfo"]["externalAvailableMemory"])
|
||||||
|
/ filteredDeviceData["latestDeviceInfo"]["externalTotalMemory"] * 10000) / 100;
|
||||||
|
} else {
|
||||||
|
viewModel["externalMemory"]["usage"] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!filteredDeviceData["initialDeviceInfo"] && !filteredDeviceData["latestDeviceInfo"]) {
|
||||||
|
viewModel["deviceInfoAvailable"] = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
deviceViewData["deviceView"] = viewModel;
|
||||||
} else if (response["status"] == "unauthorized") {
|
} else if (response["status"] == "unauthorized") {
|
||||||
deviceData["isAuthorized"] = false;
|
deviceViewData["deviceFound"] = true;
|
||||||
|
deviceViewData["isAuthorized"] = false;
|
||||||
|
} else if (response["status"] == "notFound") {
|
||||||
|
deviceViewData["deviceFound"] = false;
|
||||||
}
|
}
|
||||||
return deviceData;
|
} else {
|
||||||
|
deviceViewData["deviceFound"] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return deviceViewData;
|
||||||
}
|
}
|
||||||
@ -62,7 +62,7 @@
|
|||||||
<i class="fw fw-application fw-stack-1x"></i>
|
<i class="fw fw-application fw-stack-1x"></i>
|
||||||
<i class="fw fw-block fw-stack-2x"></i>
|
<i class="fw fw-block fw-stack-2x"></i>
|
||||||
</span>
|
</span>
|
||||||
Applications Restrictions
|
Application Restrictions
|
||||||
<span id="app-restriction-configured" class="has-configured status-icon hidden"><i
|
<span id="app-restriction-configured" class="has-configured status-icon hidden"><i
|
||||||
class="fw fw-ok"></i></span>
|
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-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
|
||||||
@ -73,8 +73,10 @@
|
|||||||
<i class="fw fw-import fw-stack-2x"></i>
|
<i class="fw fw-import fw-stack-2x"></i>
|
||||||
</span>
|
</span>
|
||||||
System Update Policy (COSU)
|
System Update Policy (COSU)
|
||||||
<span id="cosu-system-update-policy-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
|
<span id="cosu-system-update-policy-configured" class="has-configured status-icon hidden"><i
|
||||||
<span id="cosu-system-update-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
|
class="fw fw-ok"></i></span>
|
||||||
|
<span id="cosu-system-update-policy-ok" class="has-success status-icon hidden"><i
|
||||||
|
class="fw fw-ok"></i></span>
|
||||||
<span id="cosu-system-update-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
|
<span id="cosu-system-update-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
|
||||||
</a>
|
</a>
|
||||||
<a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-whitelisted-applications', this)">
|
<a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-whitelisted-applications', this)">
|
||||||
@ -82,9 +84,11 @@
|
|||||||
<i class="fw fw-register fw-stack-2x"></i>
|
<i class="fw fw-register fw-stack-2x"></i>
|
||||||
</span>
|
</span>
|
||||||
Whitelist Apps (COSU)
|
Whitelist Apps (COSU)
|
||||||
<span id="cosu-whitelisted-applications-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
|
<span id="cosu-whitelisted-applications-configured" class="has-configured status-icon hidden"><i
|
||||||
|
class="fw fw-ok"></i></span>
|
||||||
<span id="cosu-whitelisted-applications-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
|
<span id="cosu-whitelisted-applications-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
|
||||||
<span id="cosu-whitelisted-applications-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
|
<span id="cosu-whitelisted-applications-error" class="has-error status-icon hidden"><i
|
||||||
|
class="fw fw-error"></i></span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -104,10 +108,8 @@
|
|||||||
</label>
|
</label>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="panel-title-description">
|
<div class="panel-title-description">
|
||||||
This configuration can be used to set a passcode policy to an Android Device.
|
Configure the passcode policy for Android device. Once the policy is applied on a device,
|
||||||
Once this configuration profile is installed on a device, corresponding users will not be
|
the device owner will not be able to modify the password settings via the device.
|
||||||
able
|
|
||||||
to modify these settings on their devices.
|
|
||||||
</div>
|
</div>
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
@ -762,7 +764,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-label" for="wifi-ssid">
|
<label class="wr-input-label" for="wifi-ssid">
|
||||||
Service Set Identifier (SSID)*
|
Service Set Identifier (SSID)*
|
||||||
<span class="helper" title="Identification of the wireless network to be configured.">
|
<span class="helper" title="Identification of the wireless network to be configured.">
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
@ -775,8 +777,8 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-label" for="wifi-type">
|
<label class="wr-input-label" for="wifi-type">
|
||||||
Security*
|
Security*
|
||||||
<span class="helper"
|
<span class="helper"
|
||||||
title="Security type of the wireless network to be configured. 802.1x EAP works with Android 4.3 and above devices only.">
|
title="Security type of the wireless network to be configured. 802.1x EAP works with Android 4.3 and above devices only.">
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
@ -792,12 +794,13 @@
|
|||||||
<div class="wr-input-control" id="control-wifi-eap" style="display:none;">
|
<div class="wr-input-control" id="control-wifi-eap" style="display:none;">
|
||||||
<label class="wr-input-label" for="wifi-eap">
|
<label class="wr-input-label" for="wifi-eap">
|
||||||
EAP Method
|
EAP Method
|
||||||
<span class="helper" title="EAP Method of the wireless network to be configured.">
|
<span class="helper" title="EAP Method of the wireless network to be configured.">
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
<select class="form-control operationDataKeys" id="wifi-eap"
|
<select class="form-control operationDataKeys" id="wifi-eap"
|
||||||
onchange="changeAndroidWifiPolicyEAP(this, document.getElementById('wifi-type'))" data-key="wifiEAP">
|
onchange="changeAndroidWifiPolicyEAP(this, document.getElementById('wifi-type'))"
|
||||||
|
data-key="wifiEAP">
|
||||||
<option value="peap">PEAP</option>
|
<option value="peap">PEAP</option>
|
||||||
<option value="tls">TLS</option>
|
<option value="tls">TLS</option>
|
||||||
<option value="ttls">TTLS</option>
|
<option value="ttls">TTLS</option>
|
||||||
@ -809,8 +812,8 @@
|
|||||||
<div class="wr-input-control" id="control-wifi-phase2" style="display:none;">
|
<div class="wr-input-control" id="control-wifi-phase2" style="display:none;">
|
||||||
<label class="wr-input-label" for="wifi-phase2">
|
<label class="wr-input-label" for="wifi-phase2">
|
||||||
Phase 2 Authentication
|
Phase 2 Authentication
|
||||||
<span class="helper"
|
<span class="helper"
|
||||||
title="Phase 2 authentication of the wireless network to be configured.">
|
title="Phase 2 authentication of the wireless network to be configured.">
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
@ -825,11 +828,12 @@
|
|||||||
<div class="wr-input-control" id="control-wifi-provisioning" style="display:none;">
|
<div class="wr-input-control" id="control-wifi-provisioning" style="display:none;">
|
||||||
<label class="wr-input-label" for="wifi-provisioning">
|
<label class="wr-input-label" for="wifi-provisioning">
|
||||||
Provisioning
|
Provisioning
|
||||||
<span class="helper" title="Provisioning of the wireless network to be configured.">
|
<span class="helper" title="Provisioning of the wireless network to be configured.">
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
<select class="form-control operationDataKeys" id="wifi-provisioning" data-key="wifiProvisioning">
|
<select class="form-control operationDataKeys" id="wifi-provisioning"
|
||||||
|
data-key="wifiProvisioning">
|
||||||
<option value="0">0</option>
|
<option value="0">0</option>
|
||||||
<option value="1">1</option>
|
<option value="1">1</option>
|
||||||
<option value="2">2</option>
|
<option value="2">2</option>
|
||||||
@ -839,7 +843,7 @@
|
|||||||
<div class="wr-input-control" id="control-wifi-identity" style="display:none;">
|
<div class="wr-input-control" id="control-wifi-identity" style="display:none;">
|
||||||
<label class="wr-input-label" for="wifi-identity">
|
<label class="wr-input-label" for="wifi-identity">
|
||||||
Identity
|
Identity
|
||||||
<span class="helper" title="Identity of the wireless network to be configured.">
|
<span class="helper" title="Identity of the wireless network to be configured.">
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
@ -853,7 +857,7 @@
|
|||||||
<div class="wr-input-control" id="control-wifi-anoidentity" style="display:none;">
|
<div class="wr-input-control" id="control-wifi-anoidentity" style="display:none;">
|
||||||
<label class="wr-input-label" for="wifi-anoidentity">
|
<label class="wr-input-label" for="wifi-anoidentity">
|
||||||
Anonymous Identity
|
Anonymous Identity
|
||||||
<span class="helper" title="Identity of the wireless network to be configured.">
|
<span class="helper" title="Identity of the wireless network to be configured.">
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
@ -867,21 +871,21 @@
|
|||||||
<div class="wr-input-control" id="control-wifi-cacert" style="display:none;">
|
<div class="wr-input-control" id="control-wifi-cacert" style="display:none;">
|
||||||
<label class="wr-input-label" for="wifi-password">
|
<label class="wr-input-label" for="wifi-password">
|
||||||
CA Certificate
|
CA Certificate
|
||||||
<span class="helper" title="CA Certificate for the wireless network.">
|
<span class="helper" title="CA Certificate for the wireless network.">
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
<input id="wifi-cacert-upload" type="file" class="form-control"
|
<input id="wifi-cacert-upload" type="file" class="form-control"
|
||||||
onchange="base64EncodeFile(this, document.getElementById('wifi-cacert'), document.getElementById('wifi-cacert-name'))"/>
|
onchange="base64EncodeFile(this, document.getElementById('wifi-cacert'), document.getElementById('wifi-cacert-name'))"/>
|
||||||
<input id="wifi-cacert" type="hidden" class="form-control operationDataKeys"
|
<input id="wifi-cacert" type="hidden" class="form-control operationDataKeys"
|
||||||
data-key="wifiCaCert" />
|
data-key="wifiCaCert"/>
|
||||||
<input id="wifi-cacert-name" type="hidden" class="form-control operationDataKeys"
|
<input id="wifi-cacert-name" type="hidden" class="form-control operationDataKeys"
|
||||||
data-key="wifiCaCertName" />
|
data-key="wifiCaCertName"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="wr-input-control" id="control-wifi-password" style="display:none;">
|
<div class="wr-input-control" id="control-wifi-password" style="display:none;">
|
||||||
<label class="wr-input-label" for="wifi-password">
|
<label class="wr-input-label" for="wifi-password">
|
||||||
Password
|
Password
|
||||||
<span class="helper" title="Password for the wireless network.">
|
<span class="helper" title="Password for the wireless network.">
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
@ -909,11 +913,12 @@
|
|||||||
</label>
|
</label>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="panel-title-description">
|
<div class="panel-title-description">
|
||||||
This configuration can be used to create a black list or white list of applications.
|
This configuration can be used to create a blacklist or whitelist of applications.
|
||||||
</div>
|
</div>
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<div id="app-restriction-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="app-restriction-body">
|
<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">
|
<div id="app-restriction-feature-error-msg" class="alert alert-danger hidden" role="alert">
|
||||||
<i class="icon fw fw-error"></i><span></span>
|
<i class="icon fw fw-error"></i><span></span>
|
||||||
@ -927,8 +932,8 @@
|
|||||||
<br>
|
<br>
|
||||||
</label>
|
</label>
|
||||||
<select id="app-restriction-type" class="form-control operationDataKeys" data-key="restrictionType">
|
<select id="app-restriction-type" class="form-control operationDataKeys" data-key="restrictionType">
|
||||||
<option value="black-list" selected="selected">Black List</option>
|
<option value="black-list" selected="selected">BlackList</option>
|
||||||
<option value="white-list">White List</option>
|
<option value="white-list">Whitelist</option>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
@ -1034,7 +1039,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-label" for="vpn-server-address">
|
<label class="wr-input-label" for="vpn-server-address">
|
||||||
VPN Server Address*
|
VPN Server Address*
|
||||||
<span class="helper" title="Address of the VPN server to be configured.">
|
<span class="helper" title="Address of the VPN server to be configured.">
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
@ -1044,7 +1049,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-label" for="vpn-server-port">
|
<label class="wr-input-label" for="vpn-server-port">
|
||||||
VPN Server Port
|
VPN Server Port
|
||||||
<span class="helper" title="Port of the VPN server to be configured.">
|
<span class="helper" title="Port of the VPN server to be configured.">
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
@ -1054,7 +1059,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-label" for="vpn-shared-secret">
|
<label class="wr-input-label" for="vpn-shared-secret">
|
||||||
Shared Secret
|
Shared Secret
|
||||||
<span class="helper" title="Shared secret.">
|
<span class="helper" title="Shared secret.">
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
@ -1064,7 +1069,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-label" for="vpn-dns">
|
<label class="wr-input-label" for="vpn-dns">
|
||||||
DNS Server
|
DNS Server
|
||||||
<span class="helper" title="DNS Server.">
|
<span class="helper" title="DNS Server.">
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
@ -1183,7 +1188,7 @@
|
|||||||
<!-- cosu-system-update-policy -->
|
<!-- cosu-system-update-policy -->
|
||||||
<div class="wr-hidden-operation" data-operation="cosu-system-update-policy">
|
<div class="wr-hidden-operation" data-operation="cosu-system-update-policy">
|
||||||
<div class="panel panel-default operation-data" data-operation="cosu-system-update-policy"
|
<div class="panel panel-default operation-data" data-operation="cosu-system-update-policy"
|
||||||
data-operation-code="SYSTEM_UPDATE_POLICY">
|
data-operation-code="SYSTEM_UPDATE_POLICY">
|
||||||
<div id="cosu-system-update-policy-heading" class="panel-heading" role="tab">
|
<div id="cosu-system-update-policy-heading" class="panel-heading" role="tab">
|
||||||
<h2 class="sub-title panel-title">
|
<h2 class="sub-title panel-title">
|
||||||
System Update Policy (COSU)
|
System Update Policy (COSU)
|
||||||
@ -1195,7 +1200,7 @@
|
|||||||
</label>
|
</label>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="panel-title-description">
|
<div class="panel-title-description">
|
||||||
This configuration can be used to set a passcode policy to an Android Device.
|
This configuration can be used to set system update policy to an Android Device in COSU.
|
||||||
Once this configuration profile is installed on a device, corresponding users will not be
|
Once this configuration profile is installed on a device, corresponding users will not be
|
||||||
able
|
able
|
||||||
to modify these settings on their devices.
|
to modify these settings on their devices.
|
||||||
@ -1204,9 +1209,10 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="cosu-system-update-policy-body" class="panel-collapse panel-body collapse" role="tabpanel"
|
<div id="cosu-system-update-policy-body" class="panel-collapse panel-body collapse" role="tabpanel"
|
||||||
aria-labelledby="cosu-system-update-policy-body">
|
aria-labelledby="cosu-system-update-policy-body">
|
||||||
|
|
||||||
<div id="cosu-system-update-policy-feature-error-msg" class="alert alert-danger hidden" role="alert">
|
<div id="cosu-system-update-policy-feature-error-msg" class="alert alert-danger hidden"
|
||||||
|
role="alert">
|
||||||
<i class="icon fw fw-error"></i><span></span>
|
<i class="icon fw fw-error"></i><span></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -1220,25 +1226,32 @@
|
|||||||
<br><br>
|
<br><br>
|
||||||
<label class="wr-input-control radio light">
|
<label class="wr-input-control radio light">
|
||||||
<input id="automatic-system-update-radio-btn" type="radio" name="cosu-system-update-type"
|
<input id="automatic-system-update-radio-btn" type="radio" name="cosu-system-update-type"
|
||||||
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
|
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
|
||||||
value="automatic" onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])" checked/>
|
value="automatic"
|
||||||
<span class="helper" title="Installs system update automatically as soon as one is available">
|
onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])"
|
||||||
|
checked/>
|
||||||
|
<span class="helper"
|
||||||
|
title="Installs system update automatically as soon as one is available">
|
||||||
Automatic
|
Automatic
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
<label class="wr-input-control radio light">
|
<label class="wr-input-control radio light">
|
||||||
<input id="postpone-system-update-radio-btn" type="radio" name="cosu-system-update-type"
|
<input id="postpone-system-update-radio-btn" type="radio" name="cosu-system-update-type"
|
||||||
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
|
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
|
||||||
value="postpone" onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])"/>
|
value="postpone"
|
||||||
<span class="helper" title="Incoming system update will be blocked for a maximum of 30 days">
|
onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])"/>
|
||||||
|
<span class="helper"
|
||||||
|
title="Incoming system update will be blocked for a maximum of 30 days">
|
||||||
Postpone
|
Postpone
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
<label class="wr-input-control radio light">
|
<label class="wr-input-control radio light">
|
||||||
<input id="window-system-update-radio-btn" type="radio" name="cosu-system-update-type"
|
<input id="window-system-update-radio-btn" type="radio" name="cosu-system-update-type"
|
||||||
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
|
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
|
||||||
value="window" onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])"/>
|
value="window"
|
||||||
<span class="helper" title="Install system update automatically within a daily maintenance window, for a maximum of 30 days">
|
onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])"/>
|
||||||
|
<span class="helper"
|
||||||
|
title="Install system update automatically within a daily maintenance window, for a maximum of 30 days">
|
||||||
Window
|
Window
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
@ -1262,8 +1275,8 @@
|
|||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
<select id="cosu-system-update-policy-window-start-time"
|
<select id="cosu-system-update-policy-window-start-time"
|
||||||
class="form-control operationDataKeys"
|
class="form-control operationDataKeys"
|
||||||
data-key="cosuSystemUpdatePolicyWindowStartTime" data-default="0">
|
data-key="cosuSystemUpdatePolicyWindowStartTime" data-default="0">
|
||||||
<option value="1440" selected="selected">12 AM</option>
|
<option value="1440" selected="selected">12 AM</option>
|
||||||
<option value="60">1 AM</option>
|
<option value="60">1 AM</option>
|
||||||
<option value="120">2 AM</option>
|
<option value="120">2 AM</option>
|
||||||
@ -1298,8 +1311,8 @@
|
|||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
<select id="cosu-system-update-policy-window-end-time"
|
<select id="cosu-system-update-policy-window-end-time"
|
||||||
class="form-control operationDataKeys"
|
class="form-control operationDataKeys"
|
||||||
data-key="cosuSystemUpdatePolicyWindowEndTime" data-default="0">
|
data-key="cosuSystemUpdatePolicyWindowEndTime" data-default="0">
|
||||||
<option value="1440" selected="selected">12 AM</option>
|
<option value="1440" selected="selected">12 AM</option>
|
||||||
<option value="60">1 AM</option>
|
<option value="60">1 AM</option>
|
||||||
<option value="120">2 AM</option>
|
<option value="120">2 AM</option>
|
||||||
@ -1335,19 +1348,20 @@
|
|||||||
<!-- cosu-whitelist-applications -->
|
<!-- cosu-whitelist-applications -->
|
||||||
<div class="wr-hidden-operation" data-operation="cosu-whitelisted-applications">
|
<div class="wr-hidden-operation" data-operation="cosu-whitelisted-applications">
|
||||||
<div class="panel panel-default operation-data" data-operation="cosu-whitelisted-applications"
|
<div class="panel panel-default operation-data" data-operation="cosu-whitelisted-applications"
|
||||||
data-operation-code="KIOSK_APPS">
|
data-operation-code="KIOSK_APPS">
|
||||||
<div id="cosu-whitelisted-applications-heading" class="panel-heading" role="tab">
|
<div id="cosu-whitelisted-applications-heading" class="panel-heading" role="tab">
|
||||||
<h2 class="sub-title panel-title">
|
<h2 class="sub-title panel-title">
|
||||||
Whitelist Applications (COSU)
|
Whitelist Applications (COSU)
|
||||||
<label id="cosu-whitelisted-applications-lbl" class="wr-input-control switch" data-toggle="collapse"
|
<label id="cosu-whitelisted-applications-lbl" class="wr-input-control switch"
|
||||||
data-target="#cosu-whitelisted-applications-body">
|
data-toggle="collapse"
|
||||||
|
data-target="#cosu-whitelisted-applications-body">
|
||||||
<input type="checkbox"/>
|
<input type="checkbox"/>
|
||||||
<span class="helper"></span>
|
<span class="helper"></span>
|
||||||
<span class="text"></span>
|
<span class="text"></span>
|
||||||
</label>
|
</label>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="panel-title-description">
|
<div class="panel-title-description">
|
||||||
This configuration can be used to set a passcode policy to an Android Device.
|
This configuration can be used to whitelist applications in lock task mode of an Android Device in COSU.
|
||||||
Once this configuration profile is installed on a device, corresponding users will not be
|
Once this configuration profile is installed on a device, corresponding users will not be
|
||||||
able
|
able
|
||||||
to modify these settings on their devices.
|
to modify these settings on their devices.
|
||||||
@ -1356,20 +1370,23 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="cosu-whitelisted-applications-body" class="panel-collapse panel-body collapse" role="tabpanel"
|
<div id="cosu-whitelisted-applications-body" class="panel-collapse panel-body collapse" role="tabpanel"
|
||||||
aria-labelledby="cosu-whitelisted-applications-body">
|
aria-labelledby="cosu-whitelisted-applications-body">
|
||||||
|
|
||||||
<div id="cosu-whitelisted-applications-feature-error-msg" class="alert alert-danger hidden" role="alert">
|
<div id="cosu-whitelisted-applications-feature-error-msg" class="alert alert-danger hidden"
|
||||||
|
role="alert">
|
||||||
<i class="icon fw fw-error"></i><span></span>
|
<i class="icon fw fw-error"></i><span></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-label" for="cosu-whitelisted-applications">
|
<label class="wr-input-label" for="cosu-whitelisted-applications">
|
||||||
Whitelisted Applications to enter Lock Task Mode
|
Whitelisted Applications to enter Lock Task Mode
|
||||||
<span class="helper" title="Configuration information specific to a given third-party VPN solution. This has to be input as key/value pairs.">
|
<span class="helper"
|
||||||
|
title="Configuration information specific to a given third-party VPN solution. This has to be input as key/value pairs.">
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
</span>
|
</span>
|
||||||
<br>
|
<br>
|
||||||
<a href="#cosu-whitelisted-applications-grid" class="grid-input-add" data-click-event="add-form">
|
<a href="#cosu-whitelisted-applications-grid" class="grid-input-add"
|
||||||
|
data-click-event="add-form">
|
||||||
<span class="icon fw-stack">
|
<span class="icon fw-stack">
|
||||||
<i class="fw fw-add fw-stack-1x"></i>
|
<i class="fw fw-add fw-stack-1x"></i>
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
<i class="fw fw-ring fw-stack-2x"></i>
|
||||||
@ -1379,40 +1396,42 @@
|
|||||||
</a>
|
</a>
|
||||||
</label>
|
</label>
|
||||||
<div id="cosu-whitelisted-applications"
|
<div id="cosu-whitelisted-applications"
|
||||||
class="operationDataKeys grouped-array-input multi-column-key-value-pair-array"
|
class="operationDataKeys grouped-array-input multi-column-key-value-pair-array"
|
||||||
data-key="cosuWhitelistedApplications" data-column-count="2">
|
data-key="cosuWhitelistedApplications" data-column-count="2">
|
||||||
<table class="table table-responsive table-striped">
|
<table class="table table-responsive table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>No:</th>
|
<th>No:</th>
|
||||||
<th>Application Name / Description</th>
|
<th>Application Name / Description</th>
|
||||||
<th>Package Name</th>
|
<th>Package Name</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody data-add-form-container="#cosu-whitelisted-applications-grid">
|
<tbody data-add-form-container="#cosu-whitelisted-applications-grid">
|
||||||
<tr data-help-text="add-form">
|
<tr data-help-text="add-form">
|
||||||
<td colspan="4">
|
<td colspan="4">
|
||||||
No entries added yet .
|
No entries added yet .
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<table class="template hidden">
|
<table class="template hidden">
|
||||||
<tbody data-add-form="#cosu-whitelisted-applications-grid">
|
<tbody data-add-form="#cosu-whitelisted-applications-grid">
|
||||||
<tr data-add-form-element="clone">
|
<tr data-add-form-element="clone">
|
||||||
<td data-title="No:">
|
<td data-title="No:">
|
||||||
<span class="index"></span>
|
<span class="index"></span>
|
||||||
</td>
|
</td>
|
||||||
<td data-title="Application Name / Description">
|
<td data-title="Application Name / Description">
|
||||||
<input type="text" class="form-control grid-input-text" data-child-key="appName"
|
<input type="text" class="form-control grid-input-text" data-child-key="appName"
|
||||||
maxlength="100" data-default="" placeholder="[ Application Name / Description ]"/>
|
maxlength="100" data-default=""
|
||||||
</td>
|
placeholder="[ Application Name / Description ]"/>
|
||||||
<td data-title="Package Name">
|
</td>
|
||||||
<input type="text" class="form-control grid-input-text" data-child-key="packageName"
|
<td data-title="Package Name">
|
||||||
maxlength="100" data-default="" placeholder="[ Package Name ]"/>
|
<input type="text" class="form-control grid-input-text"
|
||||||
</td>
|
data-child-key="packageName"
|
||||||
<td>
|
maxlength="100" data-default="" placeholder="[ Package Name ]"/>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
<span class="list-group-item-actions">
|
<span class="list-group-item-actions">
|
||||||
<a href="#cosu-whitelisted-applications-grid" class="grid-input-remove"
|
<a href="#cosu-whitelisted-applications-grid" class="grid-input-remove"
|
||||||
data-click-event="remove-form">
|
data-click-event="remove-form">
|
||||||
@ -1422,8 +1441,8 @@
|
|||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
@ -1432,4 +1451,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1320,7 +1320,7 @@
|
|||||||
</label>
|
</label>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="panel-title-description">
|
<div class="panel-title-description">
|
||||||
This configuration can be used to set a passcode policy to an Android Device.
|
This configuration can be used to set system update policy to an Android Device in COSU.
|
||||||
Once this configuration profile is installed on a device, corresponding users will not be
|
Once this configuration profile is installed on a device, corresponding users will not be
|
||||||
able
|
able
|
||||||
to modify these settings on their devices.
|
to modify these settings on their devices.
|
||||||
@ -1472,7 +1472,7 @@
|
|||||||
</label>
|
</label>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="panel-title-description">
|
<div class="panel-title-description">
|
||||||
This configuration can be used to set a passcode policy to an Android Device.
|
This configuration can be used to whitelist applications in lock task mode of an Android Device in COSU.
|
||||||
Once this configuration profile is installed on a device, corresponding users will not be
|
Once this configuration profile is installed on a device, corresponding users will not be
|
||||||
able
|
able
|
||||||
to modify these settings on their devices.
|
to modify these settings on their devices.
|
||||||
|
|||||||
@ -231,7 +231,7 @@
|
|||||||
<div id="camera-heading" class="panel-heading" role="tab">
|
<div id="camera-heading" class="panel-heading" role="tab">
|
||||||
<h2 class="sub-title panel-title">
|
<h2 class="sub-title panel-title">
|
||||||
Restrictions
|
Restrictions
|
||||||
<label class="wr-input-control switch" data-toggle="collapse" data-target="#camera-body">
|
<label class="wr-input-control switch hidden" data-toggle="collapse" data-target="#camera-body">
|
||||||
<input type="checkbox"/>
|
<input type="checkbox"/>
|
||||||
<span class="helper"></span>
|
<span class="helper"></span>
|
||||||
<span class="text"></span>
|
<span class="text"></span>
|
||||||
@ -254,7 +254,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="camera-enabled" type="checkbox" class="operationDataKeys" data-key="cameraEnabled"
|
<input id="camera-enabled" type="checkbox" class="operationDataKeys" data-key="cameraEnabled"
|
||||||
checked="checked"/>
|
checked="checked" disabled/>
|
||||||
<span class="helper"
|
<span class="helper"
|
||||||
title="Having this checked would enable Usage of phone camera in the device.">
|
title="Having this checked would enable Usage of phone camera in the device.">
|
||||||
Allow use of camera
|
Allow use of camera
|
||||||
@ -269,7 +269,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="volume-adjust-enabled" type="checkbox" class="operationDataKeys"
|
<input id="volume-adjust-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowAdjustVolumeEnabled"/>
|
data-key="disallowAdjustVolumeEnabled" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow volume adjust.">
|
<span class="helper" title="Having this checked would disallow volume adjust.">
|
||||||
Disallow volume adjust
|
Disallow volume adjust
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -281,7 +281,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-configuring-bluetooth-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-configuring-bluetooth-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowConfigBluetooth"/>
|
data-key="disallowConfigBluetooth" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow configuring bluetooth.">
|
<span class="helper" title="Having this checked would disallow configuring bluetooth.">
|
||||||
Disallow configuring bluetooth.
|
Disallow configuring bluetooth.
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -294,7 +294,7 @@
|
|||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-configuring-cell-broadcast-enabled" type="checkbox"
|
<input id="disallow-configuring-cell-broadcast-enabled" type="checkbox"
|
||||||
class="operationDataKeys"
|
class="operationDataKeys"
|
||||||
data-key="disallowConfigCellBroadcasts"/>
|
data-key="disallowConfigCellBroadcasts" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow configuring cell broadcast.">
|
<span class="helper" title="Having this checked would disallow configuring cell broadcast.">
|
||||||
Disallow cell broadcast
|
Disallow cell broadcast
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -307,7 +307,7 @@
|
|||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-configuring-credentials-enabled" type="checkbox"
|
<input id="disallow-configuring-credentials-enabled" type="checkbox"
|
||||||
class="operationDataKeys"
|
class="operationDataKeys"
|
||||||
data-key="disallowConfigCredentials"/>
|
data-key="disallowConfigCredentials" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow configuring credentials.">
|
<span class="helper" title="Having this checked would disallow configuring credentials.">
|
||||||
Disallow configuring credentials
|
Disallow configuring credentials
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -320,7 +320,7 @@
|
|||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-configuring-mobile-networkst-enabled" type="checkbox"
|
<input id="disallow-configuring-mobile-networkst-enabled" type="checkbox"
|
||||||
class="operationDataKeys"
|
class="operationDataKeys"
|
||||||
data-key="disallowConfigMobileNetworks"/>
|
data-key="disallowConfigMobileNetworks" disabled/>
|
||||||
<span class="helper"
|
<span class="helper"
|
||||||
title="Having this checked would disallow configuring mobile networks.">
|
title="Having this checked would disallow configuring mobile networks.">
|
||||||
Disallow configuring mobile networks
|
Disallow configuring mobile networks
|
||||||
@ -334,7 +334,7 @@
|
|||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-configuring-tethering-enabled" type="checkbox"
|
<input id="disallow-configuring-tethering-enabled" type="checkbox"
|
||||||
class="operationDataKeys"
|
class="operationDataKeys"
|
||||||
data-key="disallowConfigTethering"/>
|
data-key="disallowConfigTethering" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow configuring tethering.">
|
<span class="helper" title="Having this checked would disallow configuring tethering.">
|
||||||
Disallow configuring tethering
|
Disallow configuring tethering
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -346,7 +346,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-configuring-VPN-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-configuring-VPN-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowConfigVpn"/>
|
data-key="disallowConfigVpn" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow configuring VPN.">
|
<span class="helper" title="Having this checked would disallow configuring VPN.">
|
||||||
Disallow configuring VPN
|
Disallow configuring VPN
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -358,7 +358,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-configuring-Wifi-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-configuring-Wifi-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowConfigWifi"/>
|
data-key="disallowConfigWifi" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow configuring Wifi.">
|
<span class="helper" title="Having this checked would disallow configuring Wifi.">
|
||||||
Disallow configuring Wifi
|
Disallow configuring Wifi
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -371,7 +371,7 @@
|
|||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-configuring-app-control-enabled" type="checkbox"
|
<input id="disallow-configuring-app-control-enabled" type="checkbox"
|
||||||
class="operationDataKeys"
|
class="operationDataKeys"
|
||||||
data-key="disallowAppControl"/>
|
data-key="disallowAppControl" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow configuring app control.">
|
<span class="helper" title="Having this checked would disallow configuring app control.">
|
||||||
Disallow configuring app control
|
Disallow configuring app control
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -383,7 +383,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-create-window-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-create-window-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowCreateWindows"/>
|
data-key="disallowCreateWindows" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow create window.">
|
<span class="helper" title="Having this checked would disallow create window.">
|
||||||
Disallow create window
|
Disallow create window
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -396,7 +396,7 @@
|
|||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-cross-profile-copy-paste-enabled" type="checkbox"
|
<input id="disallow-cross-profile-copy-paste-enabled" type="checkbox"
|
||||||
class="operationDataKeys"
|
class="operationDataKeys"
|
||||||
data-key="disallowCrossProfileCopyPaste"/>
|
data-key="disallowCrossProfileCopyPaste" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow cross profile copy paste.">
|
<span class="helper" title="Having this checked would disallow cross profile copy paste.">
|
||||||
Disallow cross profile copy paste
|
Disallow cross profile copy paste
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -408,7 +408,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-debugging-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-debugging-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowDebugging"/>
|
data-key="disallowDebugging" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow debugging.">
|
<span class="helper" title="Having this checked would disallow debugging.">
|
||||||
Disallow debuging
|
Disallow debuging
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -420,7 +420,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-factory-reset-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-factory-reset-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowFactoryReset"/>
|
data-key="disallowFactoryReset" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow factory reset.">
|
<span class="helper" title="Having this checked would disallow factory reset.">
|
||||||
Disallow factory reset
|
Disallow factory reset
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -432,7 +432,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-add-user-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-add-user-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowAddUser"/>
|
data-key="disallowAddUser" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow add user.">
|
<span class="helper" title="Having this checked would disallow add user.">
|
||||||
Disallow add user
|
Disallow add user
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -444,7 +444,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-install-apps-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-install-apps-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowInstallApps"/>
|
data-key="disallowInstallApps" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow install apps.">
|
<span class="helper" title="Having this checked would disallow install apps.">
|
||||||
Disallow install apps
|
Disallow install apps
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -457,7 +457,7 @@
|
|||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-installing-from-unknown-enabled" type="checkbox"
|
<input id="disallow-installing-from-unknown-enabled" type="checkbox"
|
||||||
class="operationDataKeys"
|
class="operationDataKeys"
|
||||||
data-key="disallowInstallUnknownSources"/>
|
data-key="disallowInstallUnknownSources" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow installing from unknown
|
<span class="helper" title="Having this checked would disallow installing from unknown
|
||||||
sources.">
|
sources.">
|
||||||
Disallow install from unknown sources
|
Disallow install from unknown sources
|
||||||
@ -470,7 +470,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-modify-accounts-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-modify-accounts-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowModifyAccounts"/>
|
data-key="disallowModifyAccounts" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow modify accounts.">
|
<span class="helper" title="Having this checked would disallow modify accounts.">
|
||||||
Disallow modify accounts
|
Disallow modify accounts
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -482,7 +482,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-mount-physical-media-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-mount-physical-media-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowMountPhysicalMedia"/>
|
data-key="disallowMountPhysicalMedia" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow mount physical media.">
|
<span class="helper" title="Having this checked would disallow mount physical media.">
|
||||||
Disallow mount physical media
|
Disallow mount physical media
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -494,7 +494,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-network-reset-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-network-reset-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowNetworkReset"/>
|
data-key="disallowNetworkReset" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow network reset.">
|
<span class="helper" title="Having this checked would disallow network reset.">
|
||||||
Disallow network reset
|
Disallow network reset
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -506,7 +506,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-outgoing-beam-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-outgoing-beam-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowOutgoingBeam"/>
|
data-key="disallowOutgoingBeam" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow outgoing beam.">
|
<span class="helper" title="Having this checked would disallow outgoing beam.">
|
||||||
Disallow outgoing beam
|
Disallow outgoing beam
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -518,7 +518,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-outgoing-calls-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-outgoing-calls-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowOutgoingCalls"/>
|
data-key="disallowOutgoingCalls" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow outgoing calls.">
|
<span class="helper" title="Having this checked would disallow outgoing calls.">
|
||||||
Disallow outgoing calls
|
Disallow outgoing calls
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -530,7 +530,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-remove-user-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-remove-user-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowRemoveUser"/>
|
data-key="disallowRemoveUser" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow remove user.">
|
<span class="helper" title="Having this checked would disallow remove user.">
|
||||||
Disallow remove user
|
Disallow remove user
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -542,7 +542,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-safe-boot-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-safe-boot-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowSafeBoot"/>
|
data-key="disallowSafeBoot" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow safe boot.">
|
<span class="helper" title="Having this checked would disallow safe boot.">
|
||||||
Disallow safe boot
|
Disallow safe boot
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -554,7 +554,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-location-sharing-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-location-sharing-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowLocationSharing"/>
|
data-key="disallowLocationSharing" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow location sharing.">
|
<span class="helper" title="Having this checked would disallow location sharing.">
|
||||||
Disallow location sharing
|
Disallow location sharing
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -566,7 +566,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-SMS-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-SMS-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowSMS"/>
|
data-key="disallowSMS" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow SMS.">
|
<span class="helper" title="Having this checked would disallow SMS.">
|
||||||
Disallow SMS
|
Disallow SMS
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -578,7 +578,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-uninstall-apps-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-uninstall-apps-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowUninstallApps"/>
|
data-key="disallowUninstallApps" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow uninstall apps.">
|
<span class="helper" title="Having this checked would disallow uninstall apps.">
|
||||||
Disallow uninstall apps
|
Disallow uninstall apps
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -590,7 +590,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-unmute-microphone-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-unmute-microphone-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowUnmuteMicrophone"/>
|
data-key="disallowUnmuteMicrophone" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow unmute microphone.">
|
<span class="helper" title="Having this checked would disallow unmute microphone.">
|
||||||
Disallow unmute microphone
|
Disallow unmute microphone
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -602,7 +602,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-USB-transfer-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disallow-USB-transfer-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disallowUSBFileTransfer"/>
|
data-key="disallowUSBFileTransfer" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow USB file transfer.">
|
<span class="helper" title="Having this checked would disallow USB file transfer.">
|
||||||
Disallow USB file transfer
|
Disallow USB file transfer
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -615,7 +615,7 @@
|
|||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disallow-parent-profile-app-linking-enabled" type="checkbox"
|
<input id="disallow-parent-profile-app-linking-enabled" type="checkbox"
|
||||||
class="operationDataKeys"
|
class="operationDataKeys"
|
||||||
data-key="disallowParentProfileAppLinking"/>
|
data-key="disallowParentProfileAppLinking" disabled/>
|
||||||
<span class="helper" title="Having this checked would disallow parent profile app linking.">
|
<span class="helper" title="Having this checked would disallow parent profile app linking.">
|
||||||
Disallow parent profile app linking
|
Disallow parent profile app linking
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -627,7 +627,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="ensure-verifying-apps-enabled" type="checkbox" class="operationDataKeys"
|
<input id="ensure-verifying-apps-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="ensureVerifyApps"/>
|
data-key="ensureVerifyApps" disabled/>
|
||||||
<span class="helper" title="Having this checked would ensure verifying apps .">
|
<span class="helper" title="Having this checked would ensure verifying apps .">
|
||||||
Ensure verifying apps
|
Ensure verifying apps
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -639,7 +639,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="enable-auto-timing-enabled" type="checkbox" class="operationDataKeys"
|
<input id="enable-auto-timing-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="enableAutoTime"/>
|
data-key="enableAutoTime" disabled/>
|
||||||
<span class="helper" title="Having this checked would enable auto timing .">
|
<span class="helper" title="Having this checked would enable auto timing .">
|
||||||
Enable auto timing
|
Enable auto timing
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -651,7 +651,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disable-screen-capture-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disable-screen-capture-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disableScreenCapture"/>
|
data-key="disableScreenCapture" disabled/>
|
||||||
<span class="helper" title="Having this checked would disable screen capture .">
|
<span class="helper" title="Having this checked would disable screen capture .">
|
||||||
Disable screen capture
|
Disable screen capture
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -666,7 +666,7 @@
|
|||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-control checkbox">
|
<label class="wr-input-control checkbox">
|
||||||
<input id="disable-status-bar-enabled" type="checkbox" class="operationDataKeys"
|
<input id="disable-status-bar-enabled" type="checkbox" class="operationDataKeys"
|
||||||
data-key="disableStatusBar"/>
|
data-key="disableStatusBar" disabled/>
|
||||||
<span class="helper" title="Having this checked would disable status bar .">
|
<span class="helper" title="Having this checked would disable status bar .">
|
||||||
Disable status bar
|
Disable status bar
|
||||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||||
@ -1158,7 +1158,7 @@
|
|||||||
<div id="work-profile-policy-heading" class="panel-heading" role="tab">
|
<div id="work-profile-policy-heading" class="panel-heading" role="tab">
|
||||||
<h2 class="sub-title panel-title">
|
<h2 class="sub-title panel-title">
|
||||||
Work-Profile Configurations
|
Work-Profile Configurations
|
||||||
<label id="work-profile-policy-lbl" class="wr-input-control switch" data-toggle="collapse" data-target="#work-profile-policy-body">
|
<label id="work-profile-policy-lbl" class="wr-input-control switch hidden" data-toggle="collapse" data-target="#work-profile-policy-body">
|
||||||
<input type="checkbox" />
|
<input type="checkbox" />
|
||||||
<span class="helper"></span>
|
<span class="helper"></span>
|
||||||
<span class="text"></span>
|
<span class="text"></span>
|
||||||
@ -1192,7 +1192,7 @@
|
|||||||
</span>
|
</span>
|
||||||
<br>
|
<br>
|
||||||
</label>
|
</label>
|
||||||
<input id="work-profile-policy-profile-name" type="text" class="form-control operationDataKeys" data-key="workProfilePolicyProfileName" maxlength="20">
|
<input id="work-profile-policy-profile-name" type="text" class="form-control operationDataKeys" data-key="workProfilePolicyProfileName" maxlength="20" disabled>
|
||||||
</div>
|
</div>
|
||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-label" for="work-profile-policy-enable-system-apps">
|
<label class="wr-input-label" for="work-profile-policy-enable-system-apps">
|
||||||
@ -1203,7 +1203,7 @@
|
|||||||
<br>
|
<br>
|
||||||
( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, com.google.android.calculator )
|
( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, com.google.android.calculator )
|
||||||
</label>
|
</label>
|
||||||
<textarea id="workProfilePolicyEnableSystemApps" type ="text" class="form-control operationDataKeys" rows="4" data-key="workProfilePolicyEnableSystemApps"></textarea>
|
<textarea id="workProfilePolicyEnableSystemApps" type ="text" class="form-control operationDataKeys" rows="4" data-key="workProfilePolicyEnableSystemApps" disabled></textarea>
|
||||||
</div>
|
</div>
|
||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-label" for="work-profile-policy-hide-system-apps">
|
<label class="wr-input-label" for="work-profile-policy-hide-system-apps">
|
||||||
@ -1214,7 +1214,7 @@
|
|||||||
<br>
|
<br>
|
||||||
( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, com.google.android.calculator )
|
( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, com.google.android.calculator )
|
||||||
</label>
|
</label>
|
||||||
<textarea id="work-profile-policy-hide-system-apps" class="form-control operationDataKeys" rows="4" data-key="workProfilePolicyHideSystemApps" placeholder=""></textarea>
|
<textarea id="work-profile-policy-hide-system-apps" class="form-control operationDataKeys" rows="4" data-key="workProfilePolicyHideSystemApps" placeholder="" disabled></textarea>
|
||||||
</div>
|
</div>
|
||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-label" for="work-profile-policy-unhide-system-apps">
|
<label class="wr-input-label" for="work-profile-policy-unhide-system-apps">
|
||||||
@ -1225,7 +1225,7 @@
|
|||||||
<br>
|
<br>
|
||||||
( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, com.google.android.calculator )
|
( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, com.google.android.calculator )
|
||||||
</label>
|
</label>
|
||||||
<textarea id="work-profile-policy-unhide-system-apps" class="form-control operationDataKeys" rows="4" data-key="workProfilePolicyUnhideSystemApps" placeholder=""></textarea>
|
<textarea id="work-profile-policy-unhide-system-apps" class="form-control operationDataKeys" rows="4" data-key="workProfilePolicyUnhideSystemApps" placeholder="" disabled></textarea>
|
||||||
</div>
|
</div>
|
||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<label class="wr-input-label" for="passcode-policy-max-passcode-age-in-days">
|
<label class="wr-input-label" for="passcode-policy-max-passcode-age-in-days">
|
||||||
@ -1236,7 +1236,7 @@
|
|||||||
<br>
|
<br>
|
||||||
( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, com.google.android.calculator )
|
( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, com.google.android.calculator )
|
||||||
</label>
|
</label>
|
||||||
<textarea id="work-profile-policy-install-playstore-apps" class="form-control operationDataKeys" rows="4" data-key="workProfilePolicyEnablePlaystoreApps" placeholder=""></textarea>
|
<textarea id="work-profile-policy-install-playstore-apps" class="form-control operationDataKeys" rows="4" data-key="workProfilePolicyEnablePlaystoreApps" placeholder="" disabled></textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -1257,7 +1257,7 @@
|
|||||||
</label>
|
</label>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="panel-title-description">
|
<div class="panel-title-description">
|
||||||
This configuration can be used to set a passcode policy to an Android Device.
|
This configuration can be used to set system update policy to an Android Device in COSU.
|
||||||
Once this configuration profile is installed on a device, corresponding users will not be
|
Once this configuration profile is installed on a device, corresponding users will not be
|
||||||
able
|
able
|
||||||
to modify these settings on their devices.
|
to modify these settings on their devices.
|
||||||
@ -1325,7 +1325,7 @@
|
|||||||
</label>
|
</label>
|
||||||
<select id="cosu-system-update-policy-window-start-time"
|
<select id="cosu-system-update-policy-window-start-time"
|
||||||
class="form-control operationDataKeys"
|
class="form-control operationDataKeys"
|
||||||
data-key="cosuSystemUpdatePolicyWindowStartTime" data-default="0">
|
data-key="cosuSystemUpdatePolicyWindowStartTime" data-default="0" disabled>
|
||||||
<option value="1440" selected="selected">12 AM</option>
|
<option value="1440" selected="selected">12 AM</option>
|
||||||
<option value="60">1 AM</option>
|
<option value="60">1 AM</option>
|
||||||
<option value="120">2 AM</option>
|
<option value="120">2 AM</option>
|
||||||
@ -1361,7 +1361,7 @@
|
|||||||
</label>
|
</label>
|
||||||
<select id="cosu-system-update-policy-window-end-time"
|
<select id="cosu-system-update-policy-window-end-time"
|
||||||
class="form-control operationDataKeys"
|
class="form-control operationDataKeys"
|
||||||
data-key="cosuSystemUpdatePolicyWindowEndTime" data-default="0">
|
data-key="cosuSystemUpdatePolicyWindowEndTime" data-default="0" disabled>
|
||||||
<option value="1440" selected="selected">12 AM</option>
|
<option value="1440" selected="selected">12 AM</option>
|
||||||
<option value="60">1 AM</option>
|
<option value="60">1 AM</option>
|
||||||
<option value="120">2 AM</option>
|
<option value="120">2 AM</option>
|
||||||
@ -1409,7 +1409,7 @@
|
|||||||
</label>
|
</label>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="panel-title-description">
|
<div class="panel-title-description">
|
||||||
This configuration can be used to set a passcode policy to an Android Device.
|
This configuration can be used to whitelist applications in lock task mode of an Android Device in COSU.
|
||||||
Once this configuration profile is installed on a device, corresponding users will not be
|
Once this configuration profile is installed on a device, corresponding users will not be
|
||||||
able
|
able
|
||||||
to modify these settings on their devices.
|
to modify these settings on their devices.
|
||||||
|
|||||||
@ -85,11 +85,7 @@ var updateNotificationCountOnSuccess = function (data, textStatus, jqXHR) {
|
|||||||
if (jqXHR.status == 200 && data) {
|
if (jqXHR.status == 200 && data) {
|
||||||
var responsePayload = JSON.parse(data);
|
var responsePayload = JSON.parse(data);
|
||||||
var newNotificationsCount = responsePayload["count"];
|
var newNotificationsCount = responsePayload["count"];
|
||||||
if (newNotificationsCount > 5) {
|
if (newNotificationsCount > 0) {
|
||||||
$(notificationBubble).html("5 <sup>+</sup> NEW");
|
|
||||||
$(notificationBubble).removeClass("hidden");
|
|
||||||
$(notificationSpacer).removeClass("hidden");
|
|
||||||
} else if (newNotificationsCount <= 5 && newNotificationsCount > 0) {
|
|
||||||
$(notificationBubble).html(newNotificationsCount + " NEW");
|
$(notificationBubble).html(newNotificationsCount + " NEW");
|
||||||
$(notificationBubble).removeClass("hidden");
|
$(notificationBubble).removeClass("hidden");
|
||||||
$(notificationSpacer).removeClass("hidden");
|
$(notificationSpacer).removeClass("hidden");
|
||||||
@ -111,7 +107,7 @@ function loadNewNotificationsOnSideViewPanel() {
|
|||||||
if ($("#right-sidebar").attr("is-authorized") == "false") {
|
if ($("#right-sidebar").attr("is-authorized") == "false") {
|
||||||
$("#notification-bubble-wrapper").remove();
|
$("#notification-bubble-wrapper").remove();
|
||||||
} else {
|
} else {
|
||||||
var serviceURL = emmAdminBasePath + "/notifications?offset=0&limit=5&status=NEW";
|
var serviceURL = emmAdminBasePath + "/notifications?offset=0&limit=6&status=NEW";
|
||||||
invokerUtil.get(serviceURL, updateNotificationCountOnSuccess, updateNotificationCountOnError);
|
invokerUtil.get(serviceURL, updateNotificationCountOnSuccess, updateNotificationCountOnError);
|
||||||
loadNewNotifications();
|
loadNewNotifications();
|
||||||
}
|
}
|
||||||
@ -126,7 +122,7 @@ function loadNewNotifications() {
|
|||||||
var currentUser = notifications.data("currentUser");
|
var currentUser = notifications.data("currentUser");
|
||||||
|
|
||||||
$.template("notification-listing", notifications.attr("src"), function (template) {
|
$.template("notification-listing", notifications.attr("src"), function (template) {
|
||||||
var serviceURL = emmAdminBasePath + "/notifications?offset=0&limit=5&status=NEW";
|
var serviceURL = emmAdminBasePath + "/notifications?offset=0&limit=6&status=NEW";
|
||||||
invokerUtil.get(
|
invokerUtil.get(
|
||||||
serviceURL,
|
serviceURL,
|
||||||
// on success
|
// on success
|
||||||
|
|||||||
@ -5,9 +5,9 @@
|
|||||||
<li class="message" data-type="selectable" >
|
<li class="message" data-type="selectable" >
|
||||||
<h4>
|
<h4>
|
||||||
<i class="icon fw fw-mobile text-muted"></i>
|
<i class="icon fw fw-mobile text-muted"></i>
|
||||||
<a href="../device/{{deviceType}}?id={{deviceIdentifier}}"
|
<a href="device/{{deviceType}}?id={{deviceIdentifier}}"
|
||||||
data-id="{{operationId}}"
|
data-id="{{operationId}}"
|
||||||
data-url="../device/{{deviceType}}?id={{deviceIdentifier}}"
|
data-url="device/{{deviceType}}?id={{deviceIdentifier}}"
|
||||||
class="new-notification text-capitalize" data-click-event="remove-form">
|
class="new-notification text-capitalize" data-click-event="remove-form">
|
||||||
Failure on {{deviceType}} {{deviceName}}
|
Failure on {{deviceType}} {{deviceName}}
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
Binary file not shown.
@ -58,7 +58,7 @@
|
|||||||
javax.xml.bind.*,
|
javax.xml.bind.*,
|
||||||
javax.naming,
|
javax.naming,
|
||||||
javax.sql,
|
javax.sql,
|
||||||
javax.xml.parsers,
|
javax.xml.parsers; version=0.0.0,
|
||||||
org.w3c.dom,
|
org.w3c.dom,
|
||||||
org.wso2.carbon.context,
|
org.wso2.carbon.context,
|
||||||
org.wso2.carbon.utils.*,
|
org.wso2.carbon.utils.*,
|
||||||
|
|||||||
@ -173,16 +173,18 @@
|
|||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.ws.commons.axiom</groupId>
|
<groupId>org.apache.ws.commons.axiom.wso2</groupId>
|
||||||
<artifactId>axiom-api</artifactId>
|
<artifactId>axiom</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<!--dependency>
|
||||||
<groupId>org.apache.ws.commons.axiom</groupId>
|
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||||
<artifactId>axiom-impl</artifactId>
|
<artifactId>axiom-impl</artifactId>
|
||||||
</dependency>
|
</dependency-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>log4j</groupId>
|
<groupId>log4j</groupId>
|
||||||
<artifactId>log4j</artifactId>
|
<artifactId>log4j</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework</groupId>
|
<groupId>org.springframework</groupId>
|
||||||
@ -206,12 +208,14 @@
|
|||||||
<artifactId>saaj-impl</artifactId>
|
<artifactId>saaj-impl</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bouncycastle</groupId>
|
<groupId>org.wso2.orbit.org.bouncycastle</groupId>
|
||||||
<artifactId>bcpkix-jdk15on</artifactId>
|
<artifactId>bcpkix-jdk15on</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bouncycastle</groupId>
|
<groupId>org.wso2.orbit.org.bouncycastle</groupId>
|
||||||
<artifactId>bcprov-jdk15on</artifactId>
|
<artifactId>bcprov-jdk15on</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.codehaus.plexus</groupId>
|
<groupId>org.codehaus.plexus</groupId>
|
||||||
@ -240,6 +244,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-io</groupId>
|
<groupId>commons-io</groupId>
|
||||||
<artifactId>commons-io</artifactId>
|
<artifactId>commons-io</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.ws.rs</groupId>
|
<groupId>javax.ws.rs</groupId>
|
||||||
@ -269,6 +274,10 @@
|
|||||||
<groupId>org.wso2.carbon.identity</groupId>
|
<groupId>org.wso2.carbon.identity</groupId>
|
||||||
<artifactId>org.wso2.carbon.identity.base</artifactId>
|
<artifactId>org.wso2.carbon.identity.base</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -307,10 +316,12 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wso2.tomcat</groupId>
|
<groupId>org.wso2.tomcat</groupId>
|
||||||
<artifactId>tomcat-servlet-api</artifactId>
|
<artifactId>tomcat-servlet-api</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.code.gson</groupId>
|
<groupId>com.google.code.gson</groupId>
|
||||||
<artifactId>gson</artifactId>
|
<artifactId>gson</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
|||||||
@ -77,8 +77,8 @@ public class OperationHandler {
|
|||||||
}
|
}
|
||||||
} else if (Constants.SyncMLResponseCodes.PIN_NOTFOUND.equals(status.getData())) {
|
} else if (Constants.SyncMLResponseCodes.PIN_NOTFOUND.equals(status.getData())) {
|
||||||
for (Operation operation : pendingDataOperations) {
|
for (Operation operation : pendingDataOperations) {
|
||||||
if (operation.getId() == status.getCommandReference() && (OperationCode.Command.DEVICE_LOCK.equals(
|
if (operation.getId() == status.getCommandReference() &&
|
||||||
operation.getCode()))) {
|
(PluginConstants.OperationCodes.DEVICE_LOCK.equals(operation.getCode()))) {
|
||||||
operation.setStatus(Operation.Status.ERROR);
|
operation.setStatus(Operation.Status.ERROR);
|
||||||
if (syncmlDocument.getHeader().getSource().getLocURI() != null) {
|
if (syncmlDocument.getHeader().getSource().getLocURI() != null) {
|
||||||
updateStatus(syncmlDocument.getHeader().getSource().getLocURI(), pendingDataOperations);
|
updateStatus(syncmlDocument.getHeader().getSource().getLocURI(), pendingDataOperations);
|
||||||
@ -353,7 +353,7 @@ public class OperationHandler {
|
|||||||
for (ItemTag item : results) {
|
for (ItemTag item : results) {
|
||||||
for (OperationCode.Info info : OperationCode.Info.values()) {
|
for (OperationCode.Info info : OperationCode.Info.values()) {
|
||||||
if (item.getSource().getLocURI().equals(info.getCode()) &&
|
if (item.getSource().getLocURI().equals(info.getCode()) &&
|
||||||
PluginConstants.OperationCodes.CAMERA_STATUS.equals(info.name())) {
|
PluginConstants.OperationCodes.CAMERA_STATUS.equals(info.name())) {
|
||||||
Profile cameraProfile = new Profile();
|
Profile cameraProfile = new Profile();
|
||||||
cameraProfile.setFeatureCode(PluginConstants.OperationCodes.CAMERA);
|
cameraProfile.setFeatureCode(PluginConstants.OperationCodes.CAMERA);
|
||||||
cameraProfile.setData(item.getData());
|
cameraProfile.setData(item.getData());
|
||||||
@ -365,7 +365,7 @@ public class OperationHandler {
|
|||||||
profiles.add(cameraProfile);
|
profiles.add(cameraProfile);
|
||||||
}
|
}
|
||||||
if (item.getSource().getLocURI().equals(info.getCode()) &&
|
if (item.getSource().getLocURI().equals(info.getCode()) &&
|
||||||
PluginConstants.OperationCodes.ENCRYPT_STORAGE_STATUS.equals(info.name())) {
|
PluginConstants.OperationCodes.ENCRYPT_STORAGE_STATUS.equals(info.name())) {
|
||||||
Profile encryptStorage = new Profile();
|
Profile encryptStorage = new Profile();
|
||||||
encryptStorage.setFeatureCode(PluginConstants.OperationCodes.ENCRYPT_STORAGE);
|
encryptStorage.setFeatureCode(PluginConstants.OperationCodes.ENCRYPT_STORAGE);
|
||||||
encryptStorage.setData(item.getData());
|
encryptStorage.setData(item.getData());
|
||||||
@ -377,7 +377,7 @@ public class OperationHandler {
|
|||||||
profiles.add(encryptStorage);
|
profiles.add(encryptStorage);
|
||||||
}
|
}
|
||||||
if (item.getSource().getLocURI().equals(info.getCode()) &&
|
if (item.getSource().getLocURI().equals(info.getCode()) &&
|
||||||
PluginConstants.OperationCodes.DEVICE_PASSWORD_STATUS.equals(info.name())) {
|
PluginConstants.OperationCodes.DEVICE_PASSWORD_STATUS.equals(info.name())) {
|
||||||
Profile encryptStorage = new Profile();
|
Profile encryptStorage = new Profile();
|
||||||
encryptStorage.setFeatureCode(PluginConstants.OperationCodes.PASSCODE_POLICY);
|
encryptStorage.setFeatureCode(PluginConstants.OperationCodes.PASSCODE_POLICY);
|
||||||
encryptStorage.setData(item.getData());
|
encryptStorage.setData(item.getData());
|
||||||
@ -394,7 +394,6 @@ public class OperationHandler {
|
|||||||
Notification notification = new Notification();
|
Notification notification = new Notification();
|
||||||
notification.setDescription("Auto generated DevicePin : " + pinValue);
|
notification.setDescription("Auto generated DevicePin : " + pinValue);
|
||||||
notification.setOperationId(result.getCommandReference());
|
notification.setOperationId(result.getCommandReference());
|
||||||
// notification.setDeviceIdentifier(deviceIdentifier);
|
|
||||||
notification.setStatus(String.valueOf(Notification.Status.NEW));
|
notification.setStatus(String.valueOf(Notification.Status.NEW));
|
||||||
try {
|
try {
|
||||||
nmService.addNotification(deviceIdentifier, notification);
|
nmService.addNotification(deviceIdentifier, notification);
|
||||||
@ -476,7 +475,7 @@ public class OperationHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
WindowsAPIUtils.getPolicyManagerService().checkPolicyCompliance(deviceIdentifier,
|
WindowsAPIUtils.getPolicyManagerService().checkPolicyCompliance(deviceIdentifier,
|
||||||
complianceFeatures);
|
complianceFeatures);
|
||||||
}
|
}
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
throw new WindowsOperationException("Error occurred while parsing json object.", e);
|
throw new WindowsOperationException("Error occurred while parsing json object.", e);
|
||||||
|
|||||||
@ -183,6 +183,7 @@ public interface ConfigurationMgtService {
|
|||||||
code = 500,
|
code = 500,
|
||||||
message = "Internal Server Error. \n Server error occurred while fetching Windows license configuration.")
|
message = "Internal Server Error. \n Server error occurred while fetching Windows license configuration.")
|
||||||
})
|
})
|
||||||
|
@Permission(name = "Enroll Device", permission = "/device-mgt/devices/enroll/windows")
|
||||||
Response getLicense(
|
Response getLicense(
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "If-Modified-Since",
|
name = "If-Modified-Since",
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
package org.wso2.carbon.device.mgt.mobile.windows.api.services.authbst;
|
package org.wso2.carbon.device.mgt.mobile.windows.api.services.authbst;
|
||||||
|
|
||||||
|
import org.wso2.carbon.apimgt.annotations.api.Permission;
|
||||||
import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException;
|
import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException;
|
||||||
import org.wso2.carbon.device.mgt.mobile.windows.api.services.authbst.beans.Credentials;
|
import org.wso2.carbon.device.mgt.mobile.windows.api.services.authbst.beans.Credentials;
|
||||||
|
|
||||||
@ -36,5 +37,6 @@ public interface BSTProvider {
|
|||||||
@POST
|
@POST
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@Path("/authentication")
|
@Path("/authentication")
|
||||||
|
@Permission(name = "Enroll Device", permission = "/device-mgt/devices/enroll/windows")
|
||||||
Response getBST(Credentials credentials) throws WindowsDeviceEnrolmentException;
|
Response getBST(Credentials credentials) throws WindowsDeviceEnrolmentException;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,94 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
~
|
||||||
|
~ Licensed 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.
|
||||||
|
-->
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||||
|
<artifactId>extensions-feature</artifactId>
|
||||||
|
<version>2.2.2-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<artifactId>org.wso2.carbon.appmgt.mdm.osgiconnector.feature</artifactId>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<version>2.2.2-SNAPSHOT</version>
|
||||||
|
<name>WSO2 Carbon - App management MDM OSGI Connector</name>
|
||||||
|
<url>http://wso2.org</url>
|
||||||
|
<description>This feature contains the core bundles required for APP management OSGI MDM connection
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.appmgt.mdm.osgiconnector</artifactId>
|
||||||
|
<version>2.2.2-SNAPSHOT</version>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||||
|
<artifactId>axiom-api</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||||
|
<artifactId>axiom-impl</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.googlecode.plist</groupId>
|
||||||
|
<artifactId>dd-plist</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.wso2.maven</groupId>
|
||||||
|
<artifactId>carbon-p2-plugin</artifactId>
|
||||||
|
<version>${carbon.p2.plugin.version}</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>4-p2-feature-generation</id>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>p2-feature-gen</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<id>org.wso2.carbon.appmgt.mdm.osgiconnector</id>
|
||||||
|
<propertiesFile>../etc/feature.properties</propertiesFile>
|
||||||
|
<adviceFile>
|
||||||
|
<properties>
|
||||||
|
<propertyDef>org.wso2.carbon.p2.category.type:server
|
||||||
|
</propertyDef>
|
||||||
|
<propertyDef>org.eclipse.equinox.p2.type.group:false
|
||||||
|
</propertyDef>
|
||||||
|
</properties>
|
||||||
|
</adviceFile>
|
||||||
|
<bundles>
|
||||||
|
<bundleDef>org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.appmgt.mdm.osgiconnector:2.2.2-SNAPSHOT</bundleDef>
|
||||||
|
<bundleDef>com.googlecode.plist:dd-plist:${googlecode.plist.version}</bundleDef>
|
||||||
|
</bundles>
|
||||||
|
<importFeatures>
|
||||||
|
</importFeatures>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
||||||
40
features/extensions-feature/pom.xml
Normal file
40
features/extensions-feature/pom.xml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||||
|
<artifactId>carbon-device-mgt-plugins-parent</artifactId>
|
||||||
|
<version>2.2.2-SNAPSHOT</version>
|
||||||
|
<relativePath>../../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>extensions-feature</artifactId>
|
||||||
|
<version>2.2.2-SNAPSHOT</version>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<name>WSO2 Carbon - Device Management Extensions</name>
|
||||||
|
<url>http://wso2.org</url>
|
||||||
|
|
||||||
|
<modules>
|
||||||
|
<module>org.wso2.carbon.appmgt.mdm.osgiconnector.feature</module>
|
||||||
|
</modules>
|
||||||
|
|
||||||
|
</project>
|
||||||
@ -172,7 +172,7 @@
|
|||||||
org.igniterealtime.smack.wso2:smackx:${smackx.wso2.version}
|
org.igniterealtime.smack.wso2:smackx:${smackx.wso2.version}
|
||||||
</bundleDef>
|
</bundleDef>
|
||||||
<bundleDef>
|
<bundleDef>
|
||||||
org.wso2.carbon.identity:org.wso2.carbon.identity.oauth.stub:${carbon.identity.version}
|
org.wso2.carbon.identity:org.wso2.carbon.identity.oauth.stub:${identity.inbound.auth.oauth.version}
|
||||||
</bundleDef>
|
</bundleDef>
|
||||||
</bundles>
|
</bundles>
|
||||||
<importFeatures>
|
<importFeatures>
|
||||||
|
|||||||
143
pom.xml
143
pom.xml
@ -37,8 +37,10 @@
|
|||||||
<modules>
|
<modules>
|
||||||
<module>components/mobile-plugins</module>
|
<module>components/mobile-plugins</module>
|
||||||
<module>components/iot-plugins</module>
|
<module>components/iot-plugins</module>
|
||||||
|
<module>components/extensions</module>
|
||||||
<module>features/mobile-plugins-feature</module>
|
<module>features/mobile-plugins-feature</module>
|
||||||
<module>features/iot-plugins-feature</module>
|
<module>features/iot-plugins-feature</module>
|
||||||
|
<module>features/extensions-feature</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<dependencyManagement>
|
<dependencyManagement>
|
||||||
@ -527,6 +529,13 @@
|
|||||||
<version>${carbon.devicemgt.plugins.version}</version>
|
<version>${carbon.devicemgt.plugins.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!--- AppM dependencies -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.appmgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.appmgt.mobile</artifactId>
|
||||||
|
<version>${carbon.appmgt.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!--Osgi dependencies-->
|
<!--Osgi dependencies-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.osgi</groupId>
|
<groupId>org.eclipse.osgi</groupId>
|
||||||
@ -623,10 +632,6 @@
|
|||||||
<groupId>org.wso2.carbon</groupId>
|
<groupId>org.wso2.carbon</groupId>
|
||||||
<artifactId>org.wso2.carbon.identity.oauth</artifactId>
|
<artifactId>org.wso2.carbon.identity.oauth</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
<exclusion>
|
|
||||||
<groupId>org.wso2.carbon</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.apimgt.keymgt.client</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<groupId>org.apache.poi</groupId>
|
<groupId>org.apache.poi</groupId>
|
||||||
<artifactId>poi-ooxml</artifactId>
|
<artifactId>poi-ooxml</artifactId>
|
||||||
@ -716,6 +721,63 @@
|
|||||||
<artifactId>org.wso2.carbon.registry.api</artifactId>
|
<artifactId>org.wso2.carbon.registry.api</artifactId>
|
||||||
<version>${carbon.kernel.version}</version>
|
<version>${carbon.kernel.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.governance</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.governance.api</artifactId>
|
||||||
|
<version>${carbon.governance.version}</version>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.apache.juddi.wso2</groupId>
|
||||||
|
<artifactId>juddi</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.wso2.carbon.registry</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.registry.common</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.registry.core</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.wso2.carbon.registry</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.registry.admin.api</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.wso2.carbon.registry</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.registry.indexing</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>com.ibm.icu</groupId>
|
||||||
|
<artifactId>icu4j</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.eclipse.equinox</groupId>
|
||||||
|
<artifactId>org.eclipse.equinox.registry</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>eclipse</groupId>
|
||||||
|
<artifactId>validateutility</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||||
|
<artifactId>axiom-api</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||||
|
<artifactId>axiom-impl</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.wso2.carbon.registry</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.registry.extensions</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>javax.servlet</groupId>
|
||||||
|
<artifactId>servlet-api</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wso2.carbon</groupId>
|
<groupId>org.wso2.carbon</groupId>
|
||||||
<artifactId>org.wso2.carbon.registry.core</artifactId>
|
<artifactId>org.wso2.carbon.registry.core</artifactId>
|
||||||
@ -912,14 +974,24 @@
|
|||||||
<version>${wss4j.security.common.version}</version>
|
<version>${wss4j.security.common.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.ws.commons.axiom</groupId>
|
<groupId>org.apache.ws.commons.axiom.wso2</groupId>
|
||||||
<artifactId>axiom-api</artifactId>
|
<artifactId>axiom</artifactId>
|
||||||
<version>${axiom-api.version}</version>
|
<version>${axiom-api.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<!--dependency>
|
||||||
<groupId>org.apache.ws.commons.axiom</groupId>
|
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||||
<artifactId>axiom-impl</artifactId>
|
<artifactId>axiom-impl</artifactId>
|
||||||
<version>${axiom-api.version}</version>
|
<version>${axiom-api.version}</version>
|
||||||
|
</dependency-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-io</groupId>
|
||||||
|
<artifactId>commons-io</artifactId>
|
||||||
|
<version>${commons-io.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-io.wso2</groupId>
|
||||||
|
<artifactId>commons-io</artifactId>
|
||||||
|
<version>${commons-io-wso2.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>log4j</groupId>
|
<groupId>log4j</groupId>
|
||||||
@ -952,14 +1024,14 @@
|
|||||||
<version>${saaj-impl.version}</version>
|
<version>${saaj-impl.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bouncycastle</groupId>
|
<groupId>org.wso2.orbit.org.bouncycastle</groupId>
|
||||||
<artifactId>bcpkix-jdk15on</artifactId>
|
<artifactId>bcpkix-jdk15on</artifactId>
|
||||||
<version>${bcpkix-jdk15on.version}</version>
|
<version>${bcpkix-jdk15on.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bouncycastle</groupId>
|
<groupId>org.wso2.orbit.org.bouncycastle</groupId>
|
||||||
<artifactId>bcprov-jdk15on</artifactId>
|
<artifactId>bcprov-jdk15on</artifactId>
|
||||||
<version>${bcpkix-jdk15on.version}</version>
|
<version>${bcprov-jdk15on.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.codehaus.plexus</groupId>
|
<groupId>org.codehaus.plexus</groupId>
|
||||||
@ -988,25 +1060,30 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-io</groupId>
|
<groupId>org.apache.felix</groupId>
|
||||||
<artifactId>commons-io</artifactId>
|
<artifactId>org.apache.felix.scr</artifactId>
|
||||||
<version>${commons-io.version}</version>
|
<version>${apache-felix.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.googlecode.json-simple.wso2</groupId>
|
<groupId>com.googlecode.json-simple.wso2</groupId>
|
||||||
<artifactId>json-simple</artifactId>
|
<artifactId>json-simple</artifactId>
|
||||||
<version>${json-simple.version}</version>
|
<version>${json-simple.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.googlecode.plist</groupId>
|
||||||
|
<artifactId>dd-plist</artifactId>
|
||||||
|
<version>${googlecode.plist.version}</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wso2.carbon.identity</groupId>
|
<groupId>org.wso2.carbon.identity</groupId>
|
||||||
<artifactId>org.wso2.carbon.identity.oauth.stub</artifactId>
|
<artifactId>org.wso2.carbon.identity.oauth.stub</artifactId>
|
||||||
<version>${carbon.identity.version}</version>
|
<version>${identity.inbound.auth.oauth.version}</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wso2.carbon.identity</groupId>
|
<groupId>org.wso2.carbon.identity</groupId>
|
||||||
<artifactId>org.wso2.carbon.identity.oauth</artifactId>
|
<artifactId>org.wso2.carbon.identity.oauth</artifactId>
|
||||||
<version>${carbon.identity.version}</version>
|
<version>${identity.inbound.auth.oauth.version}</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -1092,7 +1169,7 @@
|
|||||||
<wso2.maven.compiler.target>1.7</wso2.maven.compiler.target>
|
<wso2.maven.compiler.target>1.7</wso2.maven.compiler.target>
|
||||||
|
|
||||||
<!--Carbon kernel versions-->
|
<!--Carbon kernel versions-->
|
||||||
<carbon.kernel.version>4.4.3</carbon.kernel.version>
|
<carbon.kernel.version>4.4.9</carbon.kernel.version>
|
||||||
<carbon.kernel.version.range>[4.4.0, 4.5.0)</carbon.kernel.version.range>
|
<carbon.kernel.version.range>[4.4.0, 4.5.0)</carbon.kernel.version.range>
|
||||||
|
|
||||||
<carbon.p2.plugin.version>1.5.4</carbon.p2.plugin.version>
|
<carbon.p2.plugin.version>1.5.4</carbon.p2.plugin.version>
|
||||||
@ -1128,6 +1205,10 @@
|
|||||||
<carbon.devicemgt.version>1.2.2-SNAPSHOT</carbon.devicemgt.version>
|
<carbon.devicemgt.version>1.2.2-SNAPSHOT</carbon.devicemgt.version>
|
||||||
<carbon.devicemgt.version.range>[1.1.1, 2.0.0)</carbon.devicemgt.version.range>
|
<carbon.devicemgt.version.range>[1.1.1, 2.0.0)</carbon.devicemgt.version.range>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Carbon App Management -->
|
||||||
|
<carbon.appmgt.version>1.2.3-SNAPSHOT</carbon.appmgt.version>
|
||||||
|
|
||||||
<!-- Carbon Device Management Plugins -->
|
<!-- Carbon Device Management Plugins -->
|
||||||
<carbon.devicemgt.plugins.version>2.2.2-SNAPSHOT</carbon.devicemgt.plugins.version>
|
<carbon.devicemgt.plugins.version>2.2.2-SNAPSHOT</carbon.devicemgt.plugins.version>
|
||||||
|
|
||||||
@ -1135,23 +1216,25 @@
|
|||||||
<carbon.commons.version>4.4.8</carbon.commons.version>
|
<carbon.commons.version>4.4.8</carbon.commons.version>
|
||||||
|
|
||||||
<!-- Carbon Deployment -->
|
<!-- Carbon Deployment -->
|
||||||
<carbon.deployment.version>4.6.0</carbon.deployment.version>
|
<carbon.deployment.version>4.7.0</carbon.deployment.version>
|
||||||
|
|
||||||
<!-- Carbon Identity -->
|
<!-- Carbon Identity -->
|
||||||
<carbon.identity.version>5.0.7</carbon.identity.version>
|
<carbon.identity.framework.version>5.2.0</carbon.identity.framework.version>
|
||||||
|
<identity.inbound.auth.oauth.version>5.1.2</identity.inbound.auth.oauth.version>
|
||||||
|
<identity.inbound.auth.saml.version>5.1.1</identity.inbound.auth.saml.version>
|
||||||
<carbon.identity.version.range>[5.0.7, 6.0.0)</carbon.identity.version.range>
|
<carbon.identity.version.range>[5.0.7, 6.0.0)</carbon.identity.version.range>
|
||||||
|
|
||||||
<!-- Carbon Multi-tenancy -->
|
<!-- Carbon Multi-tenancy -->
|
||||||
<carbon.multitenancy.version>4.5.0</carbon.multitenancy.version>
|
<carbon.multitenancy.version>4.6.0</carbon.multitenancy.version>
|
||||||
|
|
||||||
<!-- Carbon Registry -->
|
<!-- Carbon Registry -->
|
||||||
<carbon.registry.version>4.4.8</carbon.registry.version>
|
<carbon.registry.version>4.5.6</carbon.registry.version>
|
||||||
|
|
||||||
<!-- Carbon Governance -->
|
<!-- Carbon Governance -->
|
||||||
<carbon.governance.version>4.5.8</carbon.governance.version>
|
<carbon.governance.version>4.6.4</carbon.governance.version>
|
||||||
|
|
||||||
<!-- Carbon API Management -->
|
<!-- Carbon API Management -->
|
||||||
<carbon.api.mgt.version>5.0.5</carbon.api.mgt.version>
|
<carbon.api.mgt.version>6.0.5</carbon.api.mgt.version>
|
||||||
|
|
||||||
<!-- XMPP/MQTT Version -->
|
<!-- XMPP/MQTT Version -->
|
||||||
<smack.wso2.version>3.0.4.wso2v1</smack.wso2.version>
|
<smack.wso2.version>3.0.4.wso2v1</smack.wso2.version>
|
||||||
@ -1165,8 +1248,8 @@
|
|||||||
<swagger.version>1.5.8</swagger.version>
|
<swagger.version>1.5.8</swagger.version>
|
||||||
|
|
||||||
<!-- Carbon Analytics -->
|
<!-- Carbon Analytics -->
|
||||||
<carbon.analytics.common.version>5.0.11</carbon.analytics.common.version>
|
<carbon.analytics.common.version>5.1.3</carbon.analytics.common.version>
|
||||||
<carbon.analytics.common.version.range>[5.0.11,6.0.0)</carbon.analytics.common.version.range>
|
<carbon.analytics.common.version.range>[5.1.3,6.0.0)</carbon.analytics.common.version.range>
|
||||||
<carbon.analytics.version>1.0.6-ALPHA</carbon.analytics.version>
|
<carbon.analytics.version>1.0.6-ALPHA</carbon.analytics.version>
|
||||||
<carbon.analytics.version.range>[1.0.5,2.0.0]</carbon.analytics.version.range>
|
<carbon.analytics.version.range>[1.0.5,2.0.0]</carbon.analytics.version.range>
|
||||||
|
|
||||||
@ -1177,6 +1260,11 @@
|
|||||||
<codehaus.plexus.version>3.0.21</codehaus.plexus.version>
|
<codehaus.plexus.version>3.0.21</codehaus.plexus.version>
|
||||||
<google.gson.version>2.2.4</google.gson.version>
|
<google.gson.version>2.2.4</google.gson.version>
|
||||||
<gcm.server.version>1.0.2</gcm.server.version>
|
<gcm.server.version>1.0.2</gcm.server.version>
|
||||||
|
<commons-io-wso2.version>2.4.0.wso2v1</commons-io-wso2.version>
|
||||||
|
<commons-io.version>2.4</commons-io.version>
|
||||||
|
<apache-felix.version>1.0.8</apache-felix.version>
|
||||||
|
<googlecode.plist.version>1.8</googlecode.plist.version>
|
||||||
|
|
||||||
|
|
||||||
<orbit.version.commons-httpclient>3.1.0.wso2v2</orbit.version.commons-httpclient>
|
<orbit.version.commons-httpclient>3.1.0.wso2v2</orbit.version.commons-httpclient>
|
||||||
<!--<commons-codec.wso2.version>1.4.0.wso2v1</commons-codec.wso2.version>-->
|
<!--<commons-codec.wso2.version>1.4.0.wso2v1</commons-codec.wso2.version>-->
|
||||||
@ -1184,19 +1272,19 @@
|
|||||||
|
|
||||||
<javaee-web-api.version>6.0</javaee-web-api.version>
|
<javaee-web-api.version>6.0</javaee-web-api.version>
|
||||||
|
|
||||||
<axiom-api.version>1.2.14</axiom-api.version>
|
<axiom-api.version>1.2.11.wso2v10</axiom-api.version>
|
||||||
<log4j.version>1.2.17</log4j.version>
|
<log4j.version>1.2.17</log4j.version>
|
||||||
<spring-web.version>3.0.5.RELEASE</spring-web.version>
|
<spring-web.version>3.0.5.RELEASE</spring-web.version>
|
||||||
<spring-ws-security.version>2.1.0.RELEASE</spring-ws-security.version>
|
<spring-ws-security.version>2.1.0.RELEASE</spring-ws-security.version>
|
||||||
<jaxws-rt.version>2.2.8</jaxws-rt.version>
|
<jaxws-rt.version>2.2.8</jaxws-rt.version>
|
||||||
<saaj-impl.version>1.3.18</saaj-impl.version>
|
<saaj-impl.version>1.3.18</saaj-impl.version>
|
||||||
<bcpkix-jdk15on.version>1.49</bcpkix-jdk15on.version>
|
<bcpkix-jdk15on.version>1.52.0.wso2v2</bcpkix-jdk15on.version>
|
||||||
|
<bcprov-jdk15on.version>1.52.0.wso2v1</bcprov-jdk15on.version>
|
||||||
<plexus-utils.version>3.0.21</plexus-utils.version>
|
<plexus-utils.version>3.0.21</plexus-utils.version>
|
||||||
<joda-time.version>2.2</joda-time.version>
|
<joda-time.version>2.2</joda-time.version>
|
||||||
<wss4j.security.version>1.6.17</wss4j.security.version>
|
<wss4j.security.version>1.6.17</wss4j.security.version>
|
||||||
<wss4j.security.common.version>2.0.0</wss4j.security.common.version>
|
<wss4j.security.common.version>2.0.0</wss4j.security.common.version>
|
||||||
|
|
||||||
<commons-io.version>2.4</commons-io.version>
|
|
||||||
<commons-json.version>3.0.0.wso2v1</commons-json.version>
|
<commons-json.version>3.0.0.wso2v1</commons-json.version>
|
||||||
<commons-json.version.range>(3.0.0, 4.0.0]</commons-json.version.range>
|
<commons-json.version.range>(3.0.0, 4.0.0]</commons-json.version.range>
|
||||||
<json.path.version>0.9.1</json.path.version>
|
<json.path.version>0.9.1</json.path.version>
|
||||||
@ -1227,6 +1315,7 @@
|
|||||||
<servlet-api.version>2.5</servlet-api.version>
|
<servlet-api.version>2.5</servlet-api.version>
|
||||||
|
|
||||||
<hibernate-validator.version>5.0.2.Final</hibernate-validator.version>
|
<hibernate-validator.version>5.0.2.Final</hibernate-validator.version>
|
||||||
|
<javax.xml.parsers.import.pkg.version>[0.0.0,1.0.0)</javax.xml.parsers.import.pkg.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<scm>
|
<scm>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user