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>
|
||||
<artifactId>org.wso2.carbon.identity.oauth.stub</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-pool.wso2</groupId>
|
||||
<artifactId>commons-pool</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
@ -72,7 +72,7 @@
|
||||
org.wso2.carbon.utils,
|
||||
javax.xml.bind,
|
||||
javax.xml.bind.annotation,
|
||||
javax.xml.parsers,
|
||||
javax.xml.parsers; version="${javax.xml.parsers.import.pkg.version}",
|
||||
org.w3c.dom
|
||||
</Import-Package>
|
||||
<Export-Package>
|
||||
|
||||
@ -36,7 +36,7 @@
|
||||
<module>androidsense-plugin</module>
|
||||
<module>arduino-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-analytics</module>
|
||||
</modules>
|
||||
|
||||
@ -176,6 +176,12 @@
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.analytics.data.publisher</artifactId>
|
||||
<scope>provided</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.analytics</groupId>
|
||||
@ -199,6 +205,12 @@
|
||||
<dependency>
|
||||
<groupId>io.swagger</groupId>
|
||||
<artifactId>swagger-jaxrs</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
|
||||
@ -45,6 +45,9 @@ public class ApplicationInstallation extends AndroidOperation implements Seriali
|
||||
@ApiModelProperty(name = "url", value = "Application URL", required = true)
|
||||
private String url;
|
||||
|
||||
@ApiModelProperty(name = "schedule", value = "Schedule of the App installation.")
|
||||
private String schedule;
|
||||
|
||||
public String getAppIdentifier() {
|
||||
return appIdentifier;
|
||||
}
|
||||
@ -68,4 +71,14 @@ public class ApplicationInstallation extends AndroidOperation implements Seriali
|
||||
public void setUrl(String 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]*$")
|
||||
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() {
|
||||
return appIdentifier;
|
||||
}
|
||||
@ -63,11 +59,4 @@ public class ApplicationUninstallation extends AndroidOperation implements Seria
|
||||
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;
|
||||
@ApiModelProperty(name = "url", value = "The URL of the application.", required = true)
|
||||
private String url;
|
||||
@ApiModelProperty(name = "schedule", value = "Application update schedule.", required = true)
|
||||
@ApiModelProperty(name = "schedule", value = "Application update schedule.", required = false)
|
||||
private String schedule;
|
||||
|
||||
public String getAppIdentifier() {
|
||||
|
||||
@ -30,7 +30,7 @@ import java.io.Serializable;
|
||||
description = "This class carries all information related to UpgradeFirmware.")
|
||||
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;
|
||||
|
||||
@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.LogFactory;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.InvalidDeviceException;
|
||||
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
||||
@ -78,9 +77,7 @@ import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Path("/admin/devices")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@ -88,7 +85,7 @@ import java.util.Map;
|
||||
public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminService {
|
||||
|
||||
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
|
||||
@Path("/lock-devices")
|
||||
@ -536,45 +533,14 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
|
||||
}
|
||||
|
||||
ApplicationInstallation applicationInstallation = applicationInstallationBeanWrapper.getOperation();
|
||||
JSONObject payload = new JSONObject(applicationInstallation.toJSON());
|
||||
|
||||
try {
|
||||
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());
|
||||
}
|
||||
validateApplicationUrl(applicationInstallation.getUrl());
|
||||
validateApplicationType(applicationInstallation.getType());
|
||||
validateScheduleDate(applicationInstallation.getSchedule());
|
||||
|
||||
ProfileOperation operation = new ProfileOperation();
|
||||
operation.setCode(AndroidConstants.OperationCodes.INSTALL_APPLICATION);
|
||||
operation.setType(Operation.Type.PROFILE);
|
||||
operation.setPayLoad(payload.toString());
|
||||
operation.setPayLoad(applicationInstallation.toJSON());
|
||||
return AndroidAPIUtils.getOperationResponse(applicationInstallationBeanWrapper.getDeviceIDs(),
|
||||
operation);
|
||||
} catch (JSONException e) {
|
||||
@ -616,6 +582,10 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
|
||||
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
||||
}
|
||||
ApplicationUpdate applicationUpdate = applicationUpdateBeanWrapper.getOperation();
|
||||
validateApplicationUrl(applicationUpdate.getUrl());
|
||||
validateApplicationType(applicationUpdate.getType());
|
||||
validateScheduleDate(applicationUpdate.getSchedule());
|
||||
|
||||
ProfileOperation operation = new ProfileOperation();
|
||||
operation.setCode(AndroidConstants.OperationCodes.UPDATE_APPLICATION);
|
||||
operation.setType(Operation.Type.PROFILE);
|
||||
@ -658,8 +628,7 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
|
||||
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
||||
}
|
||||
ApplicationUninstallation applicationUninstallation = applicationUninstallationBeanWrapper.getOperation();
|
||||
JSONObject payload = new JSONObject(applicationUninstallation.toJSON());
|
||||
validateType(payload);
|
||||
validateApplicationType(applicationUninstallation.getType());
|
||||
|
||||
ProfileOperation operation = new ProfileOperation();
|
||||
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
|
||||
@Path("/blacklist-applications")
|
||||
@Override
|
||||
@ -761,13 +711,7 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
|
||||
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
|
||||
}
|
||||
UpgradeFirmware upgradeFirmware = upgradeFirmwareBeanWrapper.getOperation();
|
||||
|
||||
//validate date
|
||||
if(upgradeFirmware != null && upgradeFirmware.getSchedule() != null){
|
||||
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
|
||||
sdf.setLenient(false);
|
||||
Date date = sdf.parse(upgradeFirmware.getSchedule());
|
||||
}
|
||||
validateScheduleDate(upgradeFirmware.getSchedule());
|
||||
|
||||
ProfileOperation operation = new ProfileOperation();
|
||||
operation.setCode(AndroidConstants.OperationCodes.UPGRADE_FIRMWARE);
|
||||
@ -789,11 +733,6 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
|
||||
log.error(errorMessage, e);
|
||||
throw new UnexpectedServerErrorException(
|
||||
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 Status" class="select-filter"></th>
|
||||
<th data-for="By Platform" class="select-filter data-platform"></th>
|
||||
<th data-for="By Ownership" class="select-filter"></th>
|
||||
<th data-for="By Ownership" class="select-filter data-ownership"></th>
|
||||
<th class="no-sort"></th>
|
||||
</tr>
|
||||
<tr class="bulk-action-row hidden">
|
||||
@ -107,9 +107,15 @@
|
||||
<div id="operation-bar">
|
||||
{{unit "mdm.unit.device.operation-bar"}}
|
||||
</div>
|
||||
<div id="operation-guide" class="bs-callout bs-callout-info">
|
||||
<h4>Enabling Device Operations</h4>
|
||||
<p>To enable device operations, select the desired platform from above filter.</p>
|
||||
<div id="operation-guide" class="message message-info">
|
||||
<h4 class="remove-margin">
|
||||
<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>
|
||||
</th>
|
||||
</tr>
|
||||
|
||||
@ -95,8 +95,6 @@ function loadDevices() {
|
||||
"data": []
|
||||
};
|
||||
|
||||
return JSON.stringify(json);
|
||||
|
||||
} else if (data["count"] > 0) {
|
||||
$(noDeviceView).remove();
|
||||
$("#enroll-btn").removeClass('hidden');
|
||||
@ -114,7 +112,7 @@ function loadDevices() {
|
||||
user: data.devices[index].enrolmentInfo.owner,
|
||||
status: data.devices[index].enrolmentInfo.status,
|
||||
ownership: data.devices[index].enrolmentInfo.ownership,
|
||||
deviceType: data.devices[index].type,
|
||||
type: data.devices[index].type,
|
||||
deviceIdentifier: data.devices[index].deviceIdentifier,
|
||||
name : data.devices[index].name
|
||||
}
|
||||
@ -127,14 +125,15 @@ function loadDevices() {
|
||||
"data": objects
|
||||
};
|
||||
|
||||
return JSON.stringify(json);
|
||||
}
|
||||
|
||||
return JSON.stringify(json);
|
||||
};
|
||||
|
||||
// possible params - nRow, aData, dataIndex
|
||||
var fnCreatedRow = function (nRow, aData) {
|
||||
$(nRow).attr('data-type', 'selectable');
|
||||
$(nRow).attr('data-devicetype', aData["deviceType"]);
|
||||
$(nRow).attr('data-devicetype', aData["type"]);
|
||||
$(nRow).attr('data-deviceid', aData["deviceIdentifier"]);
|
||||
};
|
||||
|
||||
@ -143,14 +142,15 @@ function loadDevices() {
|
||||
class : 'remove-padding icon-only content-fill viewEnabledIcon',
|
||||
data : null,
|
||||
render: function (data, type, row) {
|
||||
var deviceType = row.deviceType;
|
||||
var deviceType = row.type;
|
||||
var deviceIdentifier = row.deviceIdentifier;
|
||||
var url = "#";
|
||||
if (status != 'REMOVED') {
|
||||
if (row.status != 'REMOVED') {
|
||||
url = "device/" + deviceType + "?id=" + deviceIdentifier;
|
||||
}
|
||||
return '<div onclick="javascript:InitiateViewOption(\'' + url + '\')" class="thumbnail icon">' +
|
||||
'<i class="square-element text fw fw-mobile"></i></div>'
|
||||
'<i class="square-element text fw fw-mobile"></i>' +
|
||||
'</div>'
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -170,7 +170,7 @@ function loadDevices() {
|
||||
class: 'fade-edge remove-padding-top',
|
||||
data: '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;
|
||||
switch (status) {
|
||||
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;
|
||||
case 'INACTIVE' :
|
||||
html = '<span><i class="fw fw-warning icon-warning"></i> Inactive</span>';
|
||||
break;
|
||||
case 'BLOCKED' :
|
||||
html = '<span><i class="fw fw-remove icon-danger"></i> Blocked</span>';
|
||||
html = '<span><i class="fw fw-warning icon-error"></i> Inactive</span>';
|
||||
break;
|
||||
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;
|
||||
}
|
||||
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',
|
||||
data: 'deviceType',
|
||||
render: function (deviceType) {
|
||||
return '<div><label class="label-bold">Type : </label>' + deviceType + '</div>';
|
||||
data: 'type',
|
||||
render: function (type) {
|
||||
return '<div><label class="label-bold">Type : </label>' + type + '</div>';
|
||||
}
|
||||
},
|
||||
{
|
||||
className: 'fade-edge remove-padding-top',
|
||||
data: '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 () {
|
||||
$(".icon .text").res_text(0.2);
|
||||
$('#device-grid').removeClass('hidden');
|
||||
$("#loading-content").remove();
|
||||
}, {
|
||||
"placeholder" : "Search By Device 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.
|
||||
*/
|
||||
$(document).ready(function () {
|
||||
initPage();
|
||||
loadDevices();
|
||||
|
||||
/* Adding selected class for selected devices */
|
||||
$(deviceCheckbox).each(function () {
|
||||
|
||||
@ -33,6 +33,7 @@
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<!--suppress HtmlUnknownTarget -->
|
||||
<a href="{{@app.context}}/policies">
|
||||
Policies
|
||||
</a>
|
||||
@ -41,25 +42,29 @@
|
||||
|
||||
{{#zone "navbarActions"}}
|
||||
{{#if permissions.ADD_ADMIN_POLICY}}
|
||||
{{#equal noPolicy false}}
|
||||
<li>
|
||||
<!--suppress HtmlUnknownTarget -->
|
||||
<a href="{{@app.context}}/policy/add" class="cu-btn">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-add fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
</span>
|
||||
Add Policy
|
||||
Add New Policy
|
||||
</a>
|
||||
</li>
|
||||
{{/equal}}
|
||||
{{/if}}
|
||||
{{#if permissions.CHANGE_POLICY_PRIORITY}}
|
||||
{{#equal noPolicy false}}
|
||||
<li>
|
||||
<!--suppress HtmlUnknownTarget -->
|
||||
<a href="{{@app.context}}/policy/priority" class="cu-btn">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-throttling-policy fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
</span>
|
||||
Policy Priority
|
||||
Policy Priority
|
||||
</a>
|
||||
</li>
|
||||
{{/equal}}
|
||||
@ -70,7 +75,7 @@
|
||||
<i class="fw fw-check fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
</span>
|
||||
Apply Changes To Devices
|
||||
Apply Changes To Devices
|
||||
</a>
|
||||
</li>
|
||||
{{/zone}}
|
||||
@ -82,18 +87,21 @@
|
||||
{{#equal noPolicy true}}
|
||||
<div id="ast-container" class="ast-container list-view">
|
||||
<div class="ctrl-info-panel col-centered text-center wr-login">
|
||||
<h2>You don't have any policy at the moment.</h2>
|
||||
<br/>
|
||||
<h3 class="text-muted">
|
||||
<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}}
|
||||
<p class="text-center">
|
||||
<a href="{{@app.context}}/policy/add" class="wr-btn">
|
||||
<h3>
|
||||
<!--suppress HtmlUnknownTarget -->
|
||||
<a href="{{@app.context}}/policy/add" class="btn-operations btn-default">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-add fw-stack-1x"></i>
|
||||
</span>
|
||||
Add New Policy
|
||||
Add New Policy
|
||||
</a>
|
||||
</p>
|
||||
</h3>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
@ -229,6 +237,7 @@
|
||||
data-display="{{status}}">
|
||||
</td>
|
||||
<td class="text-right content-fill text-left-on-grid-view no-wrap">
|
||||
<!--suppress HtmlUnknownTarget -->
|
||||
<a href="{{@app.context}}/policy/edit?id={{id}}"
|
||||
data-id="{{id}}"
|
||||
data-click-event="remove-form"
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
{{unit "mdm.unit.date-range-picker"}}
|
||||
|
||||
{{#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"}}
|
||||
</div>
|
||||
{{/zone}}
|
||||
|
||||
@ -16,8 +16,8 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
function onRequest() {
|
||||
// var log = new Log("mdm.unit.device.operation-bar");
|
||||
function onRequest(context) {
|
||||
var log = new Log("mdm.unit.device.operation-bar");
|
||||
var userModule = require("/app/modules/business-controllers/user.js")["userModule"];
|
||||
var viewModel = {};
|
||||
var permissions = {};
|
||||
@ -93,10 +93,14 @@ function onRequest() {
|
||||
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/windows/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");
|
||||
}
|
||||
|
||||
viewModel["permissions"] = stringify(permissions);
|
||||
|
||||
viewModel["deviceType"] = context.unit.params.deviceType;
|
||||
viewModel["ownership"] = context.unit.params.ownership;
|
||||
|
||||
return viewModel;
|
||||
}
|
||||
@ -31,6 +31,14 @@ var operations = '.wr-operations',
|
||||
"ANDROID": "android",
|
||||
"IOS": "ios",
|
||||
"WINDOWS": "windows"
|
||||
},
|
||||
ownershipTypeConstants = {
|
||||
"BYOD": "BYOD",
|
||||
"COPE": "COPE"
|
||||
},
|
||||
operationBarModeConstants = {
|
||||
"BULK": "BULK_OPERATION_MODE",
|
||||
"SINGLE": "SINGLE_OPERATION_MODE"
|
||||
};
|
||||
|
||||
/*
|
||||
@ -94,20 +102,21 @@ function getDevicesByTypes(deviceList) {
|
||||
return deviceTypes;
|
||||
}
|
||||
|
||||
function unloadOperationBar() {
|
||||
$("#showOperationsBtn").addClass("hidden");
|
||||
$(".wr-operations").html("");
|
||||
}
|
||||
//function unloadOperationBar() {
|
||||
// $("#showOperationsBtn").addClass("hidden");
|
||||
// $(".wr-operations").html("");
|
||||
//}
|
||||
|
||||
function loadOperationBar(deviceType) {
|
||||
function loadOperationBar(deviceType, ownership, mode) {
|
||||
var operationBar = $("#operations-bar");
|
||||
var operationBarSrc = operationBar.attr("src");
|
||||
var platformType = deviceType;
|
||||
//var selectedDeviceID = deviceId;
|
||||
|
||||
$.template("operations-bar", operationBarSrc, function (template) {
|
||||
//var serviceURL = "/mdm-admin/features/" + platformType;
|
||||
var serviceURL = "/api/device-mgt/v1.0/devices/" + platformType + "/*/features";
|
||||
var successCallback = function (data) {
|
||||
var serviceURL = "/api/device-mgt/v1.0/devices/" + deviceType + "/*/features";
|
||||
invokerUtil.get(
|
||||
serviceURL,
|
||||
// success callback
|
||||
function (data) {
|
||||
var permittedOperations = [];
|
||||
var i;
|
||||
var permissionList = $("#operations-mod").data("permissions");
|
||||
@ -116,8 +125,26 @@ function loadOperationBar(deviceType) {
|
||||
var 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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -127,7 +154,6 @@ function loadOperationBar(deviceType) {
|
||||
switch (deviceType) {
|
||||
case platformTypeConstants.ANDROID:
|
||||
iconName = operationModule.getAndroidIconForFeature(current.code);
|
||||
current.type = deviceType;
|
||||
break;
|
||||
case platformTypeConstants.WINDOWS:
|
||||
iconName = operationModule.getWindowsIconForFeature(current.code);
|
||||
@ -137,17 +163,27 @@ function loadOperationBar(deviceType) {
|
||||
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;
|
||||
return current;
|
||||
}
|
||||
|
||||
return current;
|
||||
});
|
||||
|
||||
viewModel.features = permittedOperations;
|
||||
var content = template(viewModel);
|
||||
$(".wr-operations").html(content);
|
||||
};
|
||||
invokerUtil.get(serviceURL, successCallback, function (message) {
|
||||
},
|
||||
// error callback
|
||||
function (message) {
|
||||
$(".wr-operations").html(message);
|
||||
});
|
||||
});
|
||||
|
||||
@ -107,14 +107,16 @@
|
||||
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
|
||||
<h4>
|
||||
{{#equal code "WIPE_DATA"}}
|
||||
{{#equal type "android"}}
|
||||
Enter PIN code (Optional - This is required only if the device type is BYOD).
|
||||
{{#equal deviceType "android"}}
|
||||
{{#equal ownership "BYOD"}}
|
||||
Enter PIN code* of the device
|
||||
<br><br>
|
||||
<div>
|
||||
<input type="password" class="form-control modal-input operationDataKeys" id="pin"
|
||||
data-key="pin">
|
||||
<input id="pin" type="password"
|
||||
class="form-control modal-input operationDataKeys"
|
||||
placeholder="[ Required for a BYOD device ]" data-key="pin" />
|
||||
</div>
|
||||
<br>
|
||||
{{/equal}}
|
||||
{{/equal}}
|
||||
{{/equal}}
|
||||
{{#equal code "NOTIFICATION"}}
|
||||
@ -141,14 +143,8 @@
|
||||
<br>
|
||||
{{/equal}}
|
||||
{{#equal code "DEVICE_LOCK"}}
|
||||
{{#equal type "android"}}
|
||||
Type your message to be shown in the lock screen (Optional).
|
||||
<br><br>
|
||||
<div>
|
||||
<textarea class="form-control modal-input operationDataKeys" id="lock-message"
|
||||
data-key="lock-message"></textarea>
|
||||
</div>
|
||||
<br>
|
||||
{{#equal deviceType "android"}}
|
||||
{{#equal ownership "COPE"}}
|
||||
<label class="wr-input-control checkbox">
|
||||
<input id="hard-lock" type="checkbox" class="form-control operationDataKeys"
|
||||
data-key="hard-lock"/>
|
||||
@ -157,10 +153,18 @@
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</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 code "UPGRADE_FIRMWARE"}}
|
||||
{{#equal type "android"}}
|
||||
{{#equal deviceType "android"}}
|
||||
Enter firmware upgrade scheduling information.
|
||||
<br><br>
|
||||
<label class="wr-input-control checkbox">
|
||||
|
||||
@ -1195,9 +1195,9 @@ var operationModule = function () {
|
||||
var featureMap = {
|
||||
"DEVICE_LOCK": "lock-devices",
|
||||
"DISENROLL": "disenroll",
|
||||
"DEVICE_RING": "ring-devices",
|
||||
"LOCK_RESET": "lock-reset-devices",
|
||||
"WIPE_DATA": "wipe-devices"
|
||||
"DEVICE_RING": "ring-device",
|
||||
"LOCK_RESET": "lock-reset",
|
||||
"WIPE_DATA": "wipe-data"
|
||||
};
|
||||
//return "/mdm-windows-agent/services/windows/operation/" + featureMap[operationCode];
|
||||
return "/api/device-mgt/windows/v1.0/services/windows/admin/devices/" + featureMap[operationCode];
|
||||
@ -1211,16 +1211,16 @@ var operationModule = function () {
|
||||
var featureMap = {
|
||||
"DEVICE_LOCK": "fw-lock",
|
||||
"DEVICE_LOCATION": "fw-map-location",
|
||||
"CLEAR_PASSWORD": "fw-key",
|
||||
"ENTERPRISE_WIPE": "fw-clear",
|
||||
"WIPE_DATA": "fw-database",
|
||||
"CLEAR_PASSWORD": "fw-clear",
|
||||
"ENTERPRISE_WIPE": "fw-block",
|
||||
"WIPE_DATA": "fw-delete",
|
||||
"DEVICE_RING": "fw-dial-up",
|
||||
"DEVICE_REBOOT": "fw-refresh",
|
||||
"UPGRADE_FIRMWARE": "fw-up-arrow",
|
||||
"UPGRADE_FIRMWARE": "fw-hardware",
|
||||
"DEVICE_MUTE": "fw-mute",
|
||||
"NOTIFICATION": "fw-message",
|
||||
"CHANGE_LOCK_CODE": "fw-security",
|
||||
"DEVICE_UNLOCK": "fw-lock"
|
||||
"DEVICE_UNLOCK": "fw-key"
|
||||
};
|
||||
return featureMap[operationCode];
|
||||
};
|
||||
@ -1234,9 +1234,9 @@ var operationModule = function () {
|
||||
var featureMap = {
|
||||
"DEVICE_LOCK": "fw-lock",
|
||||
"DEVICE_RING": "fw-dial-up",
|
||||
"DISENROLL": "fw-delete",
|
||||
"DISENROLL": "fw-export",
|
||||
"LOCK_RESET": "fw-key",
|
||||
"WIPE_DATA": "fw-clear"
|
||||
"WIPE_DATA": "fw-delete"
|
||||
};
|
||||
return featureMap[operationCode];
|
||||
};
|
||||
@ -1250,7 +1250,7 @@ var operationModule = function () {
|
||||
var featureMap = {
|
||||
"DEVICE_LOCK": "fw-lock",
|
||||
"LOCATION": "fw-map-location",
|
||||
"ENTERPRISE_WIPE": "fw-clear",
|
||||
"ENTERPRISE_WIPE": "fw-block",
|
||||
"NOTIFICATION": "fw-message",
|
||||
"RING": "fw-dial-up"
|
||||
};
|
||||
@ -1450,6 +1450,7 @@ var operationModule = function () {
|
||||
} else if (operationDataObj.is(":radio")) {
|
||||
if (operationDataObj.val() == uiPayload[key]) {
|
||||
operationDataObj.attr("checked", true);
|
||||
operationDataObj.trigger("click");
|
||||
}
|
||||
} else if (operationDataObj.is("select")) {
|
||||
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 deviceIdentifier = deviceId.data("deviceid");
|
||||
var deviceType = deviceId.data("type");
|
||||
var payload = [deviceIdentifier];
|
||||
var ownership = deviceId.data("ownership");
|
||||
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) {
|
||||
var activeTabPane = $(e.target).attr("href");
|
||||
var activeListGroupItem = $(".media .list-group-item.active");
|
||||
|
||||
$(activeTabPane).removeClass("visible-xs-block");
|
||||
$(activeTabPane).siblings().not(".arrow-left").addClass("visible-xs-block");
|
||||
positionArrow(activeListGroupItem);
|
||||
@ -62,17 +35,14 @@ var InitiateViewOption = null;
|
||||
|
||||
$(".media.tab-responsive .tab-content").on("shown.bs.collapse", function (e) {
|
||||
var thisParent = $(e.target).parent();
|
||||
var activeTabPaneCaret = thisParent.find('.caret-updown');
|
||||
var activeTabPaneCaretSiblings = thisParent.siblings().find('.caret-updown');
|
||||
|
||||
var activeTabPaneCaret = thisParent.find(".caret-updown");
|
||||
var activeTabPaneCaretSiblings = thisParent.siblings().find(".caret-updown");
|
||||
activeTabPaneCaret.removeClass("fw-up").addClass("fw-down");
|
||||
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');
|
||||
|
||||
if ($(clickedPanel).hasClass('in')) {
|
||||
$(clickedPanel).collapse('hide');
|
||||
} else {
|
||||
@ -80,7 +50,6 @@ var InitiateViewOption = null;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function positionArrow(selectedTab) {
|
||||
var selectedTabHeight = $(selectedTab).innerHeight();
|
||||
var arrowPosition = 0;
|
||||
@ -108,30 +77,6 @@ var InitiateViewOption = null;
|
||||
$(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) {
|
||||
var operationsLogTable = "#operations-log-table";
|
||||
if (update) {
|
||||
@ -273,8 +218,8 @@ var InitiateViewOption = null;
|
||||
// success-callback
|
||||
function (data, textStatus, jqXHR) {
|
||||
if (jqXHR.status == 200 && data) {
|
||||
data = JSON.parse(data);
|
||||
$("#policy-spinner").addClass("hidden");
|
||||
data = JSON.parse(data);
|
||||
if (data["active"] == true) {
|
||||
activePolicy = data;
|
||||
invokerUtil.get(
|
||||
@ -290,42 +235,94 @@ var InitiateViewOption = null;
|
||||
if (data["complianceData"]) {
|
||||
if (data["complianceData"]["complianceFeatures"] &&
|
||||
data["complianceData"]["complianceFeatures"].length > 0) {
|
||||
viewModel["compliance"] = "NON-COMPLIANT";
|
||||
viewModel["complianceStatus"] = "NON-COMPLIANT";
|
||||
viewModel["complianceFeatures"] = data["complianceData"]["complianceFeatures"];
|
||||
content = template(viewModel);
|
||||
$("#policy-list-container").html(content);
|
||||
} else {
|
||||
viewModel["compliance"] = "COMPLIANT";
|
||||
viewModel["complianceStatus"] = "COMPLIANT";
|
||||
content = template(viewModel);
|
||||
$("#policy-list-container").html(content);
|
||||
$("#policy-compliance-table").addClass("hidden");
|
||||
}
|
||||
} else {
|
||||
$("#policy-list-container").
|
||||
html("<div class='panel-body'><br><p class='fw-warning'> This device " +
|
||||
"has no policy applied.<p></div>");
|
||||
}
|
||||
}
|
||||
},
|
||||
// error-callback
|
||||
function () {
|
||||
$("#policy-list-container").
|
||||
html("<div class='panel-body'><br><p class='fw-warning'> Loading policy compliance related data " +
|
||||
"was not successful. please try refreshing data in a while.<p></div>");
|
||||
html("<div class='message message-warning'>" +
|
||||
"<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
|
||||
function () {
|
||||
$("#policy-spinner").addClass("hidden");
|
||||
$("#policy-list-container").
|
||||
html("<div class='panel-body'><br><p class='fw-warning'> Loading policy compliance related data " +
|
||||
"was not successful. please try refreshing data in a while.<p></div>");
|
||||
html("<div class='message message-warning'>" +
|
||||
"<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 hash = url.substring(url.indexOf("#") + 1);
|
||||
|
||||
if (hash == "device_location") {
|
||||
if (hash == "device_location_tab") {
|
||||
if (!map) {
|
||||
loadLeafletMap();
|
||||
}
|
||||
|
||||
@ -1,17 +1,16 @@
|
||||
<div class="wr-app-listing">
|
||||
<div class="wr-applist">
|
||||
{{#each applications}}
|
||||
<a style="text-align: center; width: 110px; height: 140px;">
|
||||
<a style="width: 130px; height: 180px;" class="text-center">
|
||||
{{#equal isActive true}}
|
||||
{{#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}}
|
||||
<span style="word-wrap: break-word;">
|
||||
<i class="fw fw-ok icon-success" style="font-size: 14px;"></i>
|
||||
Active
|
||||
</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;" class="text-center">
|
||||
<i class="fw fw-ok icon-success" style="font-size: 14px;"></i>Active
|
||||
</span>
|
||||
{{#if memoryUsage}}
|
||||
<span style="word-wrap: break-word;">
|
||||
Memory Usage
|
||||
@ -22,8 +21,11 @@
|
||||
{{/if}}
|
||||
{{/equal}}
|
||||
{{#equal isActive false}}
|
||||
<span style="word-wrap: break-word;">{{name}}</span>
|
||||
<span style="word-wrap: break-word;"><b>V:{{version}}</b></span>
|
||||
{{#equal platform "android"}}<i class="icon fw fw-android text-muted"></i>{{/equal}}
|
||||
{{#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}}
|
||||
</a>
|
||||
{{/each}}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<div class="wr-list-group wr-sortable policy-list">
|
||||
<span class="list-group-item" id="{{id}}">
|
||||
<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">
|
||||
{{#equal deviceType "android"}}
|
||||
<i class=" fw fw-android"></i>
|
||||
@ -15,42 +15,50 @@
|
||||
</span>
|
||||
<span class="wr-list-desc">
|
||||
<h3 class="wr-list-name">{{policy.policyName}}</h3>
|
||||
<span class="wr-list-username">{{deviceType}}</span>
|
||||
<span>{{deviceType}}</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="col-lg-7">
|
||||
<div class="row no-gutter">
|
||||
<div class="wr-desc-list-configs col-lg-4">
|
||||
<div>
|
||||
<b>Ownership Type : </b> {{policy.ownershipType}}
|
||||
<b>Ownership Type</b>
|
||||
<br>
|
||||
{{policy.ownershipType}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="wr-desc-list-configs col-lg-4">
|
||||
<div>
|
||||
<b>Compliance Type :</b> {{policy.compliance}}
|
||||
<b>Compliance Type</b>
|
||||
<br>
|
||||
{{policy.compliance}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="wr-desc-list-configs col-lg-4">
|
||||
<div>
|
||||
<b>Compliance :</b>
|
||||
{{#equal compliance "COMPLIANT"}}
|
||||
<span><i class="fw fw-ok icon-success"></i> Compliant</span>
|
||||
<b>Compliance Status</b>
|
||||
<br>
|
||||
{{#equal complianceStatus "COMPLIANT"}}
|
||||
<span><i class="fw fw-ok icon-success"></i> Compliant</span>
|
||||
{{/equal}}
|
||||
{{#equal compliance "NON-COMPLIANT"}}
|
||||
<span><i class="fw fw-warning icon-danger"></i> Not Compliant</span>
|
||||
{{#equal complianceStatus "NON-COMPLIANT"}}
|
||||
<span><i class="fw fw-warning icon-danger"></i> Not Compliant</span>
|
||||
{{/equal}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3">
|
||||
<span class="list-group-item-actions">
|
||||
<a href="/emm/policies/view?id={{policy.id}}" class="cu-btn-inner policy-view-link" data-id="{{id}}">
|
||||
<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
|
||||
View
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
@ -68,9 +76,9 @@
|
||||
{{#each complianceFeatures}}
|
||||
<tr data-type="selectable">
|
||||
<td data-display="{{featureCode}}" data-grid-label="Feature Code">{{featureCode}}</td>
|
||||
<td data-display="{{compliance}}" data-grid-label="Status">
|
||||
{{#equal compliance 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}}
|
||||
<td data-display="{{complianceStatus}}" data-grid-label="Status">
|
||||
{{#equal complianceStatus true}}<span><i class="fw fw-ok icon-success"></i> Compliant</span>{{/equal}}
|
||||
{{#equal complianceStatus false}}<span><i class="fw fw-warning icon-danger"></i> Not Compliant</span>{{/equal}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
|
||||
@ -3,12 +3,14 @@
|
||||
{{unit "mdm.unit.device.qr-modal"}}
|
||||
|
||||
{{#zone "content"}}
|
||||
{{#if deviceFound}}
|
||||
{{#if isAuthorized}}
|
||||
<h1 class="page-sub-title device-id device-select" data-deviceid="{{device.deviceIdentifier}}" data-type="{{device.type}}">
|
||||
Device {{device.name}}
|
||||
{{#if device.viewModel.model}}
|
||||
<h1 class="page-sub-title device-id device-select"
|
||||
data-deviceid="{{deviceView.deviceIdentifier}}" data-type="{{deviceView.deviceType}}" data-ownership="{{deviceView.ownership}}">
|
||||
Device {{deviceView.name}}
|
||||
{{#if deviceView.model}}
|
||||
<span class="lbl-device">
|
||||
( {{device.viewModel.vendor}} {{device.viewModel.model}} )
|
||||
( {{deviceView.vendor}} {{deviceView.model}} )
|
||||
</span>
|
||||
{{/if}}
|
||||
</h1>
|
||||
@ -22,53 +24,85 @@
|
||||
{{#defineZone "device-detail-properties"}}
|
||||
<table class="table table-responsive table-striped" id="members">
|
||||
<tbody>
|
||||
<tr role="row" class="even">
|
||||
<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}}
|
||||
{{#if deviceView.deviceIdentifier}}
|
||||
<tr role="row" class="odd">
|
||||
<td class="sorting_1" style="padding:10px 15px;">Model</td>
|
||||
<td style="padding:10px 15px;">{{device.viewModel.model}}</td>
|
||||
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Device ID</td>
|
||||
<td style="padding:10px 15px;">{{deviceView.deviceIdentifier}}</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
{{#if deviceView.name}}
|
||||
<tr role="row" class="even">
|
||||
<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">
|
||||
<td class="sorting_1" style="padding:10px 15px;">UDID</td>
|
||||
<td style="padding:10px 15px;">{{device.viewModel.udid}}</td>
|
||||
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Name</td>
|
||||
<td style="padding:10px 15px;">{{deviceView.name}}</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
{{#if device.viewModel.os_build_date}}
|
||||
<tr role="row" class="even">
|
||||
<td class="sorting_1" style="padding:10px 15px;">Firmware Build Date</td>
|
||||
<td style="padding:10px 15px;">{{device.viewModel.os_build_date}}</td>
|
||||
{{#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 device.viewModel.phoneNumber}}
|
||||
<tr role="row" class="even">
|
||||
<td class="sorting_1" style="padding:10px 15px;">Phone Number</td>
|
||||
<td style="padding:10px 15px;">{{device.viewModel.phoneNumber}}</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
{{#if deviceView.status}}
|
||||
<tr role="row" class="even">
|
||||
<td class="sorting_1" style="padding:10px 15px;">Status</td>
|
||||
<td class="sorting_1" style="padding:10px 15px; width: 15%;">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}}
|
||||
{{#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>
|
||||
{{/if}}
|
||||
{{#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">
|
||||
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Ownership</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>
|
||||
{{/if}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{/defineZone}}
|
||||
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">Operations</div>
|
||||
<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>
|
||||
@ -87,8 +121,8 @@
|
||||
</li>
|
||||
<li role="presentation" class="list-group-item">
|
||||
<a href="#device_location_tab" role="tab" data-toggle="tab"
|
||||
data-lat="{{device.viewModel.location.latitude}}"
|
||||
data-long="{{device.viewModel.location.longitude}}"
|
||||
data-lat="{{deviceView.location.latitude}}"
|
||||
data-long="{{deviceView.location.longitude}}"
|
||||
aria-controls="device_location_tab">
|
||||
<i class="icon fw fw-map-location"></i><span class="hidden-sm">Device Location</span>
|
||||
</a>
|
||||
@ -121,19 +155,17 @@
|
||||
</h4>
|
||||
</div>
|
||||
<div class="panel-heading display-none-xs">Device Details</div>
|
||||
<div id="loading-content" class="col-centered">
|
||||
<i class="fw fw-settings fw-spin fw-2x"></i> Loading 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 device.type "windows"}}
|
||||
{{#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>
|
||||
{{/equal}}
|
||||
{{#if device.viewModel.BatteryLevel}}
|
||||
{{#if deviceView.deviceInfoAvailable}}
|
||||
{{#if deviceView.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">
|
||||
@ -141,24 +173,54 @@
|
||||
<div>
|
||||
<div class="tile-icon"><i class="fw fw-battery"></i></div>
|
||||
<div class="tile-stats">
|
||||
{{device.viewModel.BatteryLevel}} %
|
||||
{{deviceView.BatteryLevel.value}} %
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if device.viewModel.DeviceCapacity}}
|
||||
<!--{{#if deviceView.cpuUsage}}-->
|
||||
<!--<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">CPU Usage</div>-->
|
||||
<!--<div>-->
|
||||
<!--<div class="tile-icon"><i class="fw fw-dashboard"></i></div>-->
|
||||
<!--<div class="tile-stats">-->
|
||||
<!--{{deviceView.cpuUsage.value}} %-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<!--{{/if}}-->
|
||||
{{#if deviceView.ramUsage}}
|
||||
<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 class="tile-name">RAM Usage</div>
|
||||
<div>
|
||||
<div class="tile-icon"><i class="fw fw-hardware"></i></div>
|
||||
<div class="tile-stats">
|
||||
{{deviceView.ramUsage.value}} %
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if deviceView.internalMemory}}
|
||||
<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.DeviceCapacityPercentage}} %
|
||||
{{deviceView.internalMemory.usage}} %
|
||||
<span class="tile-stats-free">
|
||||
{{device.viewModel.AvailableDeviceCapacity}} GB Free
|
||||
TOTAL OF {{deviceView.internalMemory.total}} GB
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@ -166,35 +228,17 @@
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if device.viewModel.internal_memory.FreeCapacity}}
|
||||
{{#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">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 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}} %
|
||||
{{deviceView.externalMemory.usage}} %
|
||||
<span class="tile-stats-free">
|
||||
{{device.viewModel.external_memory.FreeCapacity}} GB Free
|
||||
TOTAL OF {{deviceView.externalMemory.total}} GB
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@ -202,6 +246,14 @@
|
||||
</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>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -209,7 +261,8 @@
|
||||
<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">
|
||||
<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>
|
||||
@ -218,6 +271,7 @@
|
||||
</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>
|
||||
@ -231,13 +285,11 @@
|
||||
<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 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 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>
|
||||
@ -255,13 +307,22 @@
|
||||
<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">
|
||||
<div id="map-error" class="message message-danger">
|
||||
<h4 class="remove-margin"><i class="icon fw fw-error"></i>Device location cannot be retrieved.</h4>
|
||||
</div>
|
||||
{{#if deviceView.location}}
|
||||
<div id="device-location"
|
||||
data-lat="{{device.viewModel.location.latitude}}"
|
||||
data-long="{{device.viewModel.location.longitude}}">
|
||||
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>
|
||||
@ -277,6 +338,7 @@
|
||||
</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>
|
||||
@ -295,8 +357,11 @@
|
||||
</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>
|
||||
<h4>
|
||||
<i class="icon fw fw-info"></i>
|
||||
No applications found.
|
||||
</h4>
|
||||
<p>Please try refreshing in a while.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -307,13 +372,14 @@
|
||||
<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 Logs
|
||||
Operations Log
|
||||
<i class="caret-updown fw fw-down"></i>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div class="panel-heading display-none-xs">
|
||||
Operations Logs
|
||||
Operations Log
|
||||
|
||||
<span>
|
||||
<a href="javascript:void(0);" id="refresh-operations">
|
||||
<i class="fw fw-refresh"></i>
|
||||
@ -332,7 +398,10 @@
|
||||
</div>
|
||||
<div id="operations-log-container">
|
||||
<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">
|
||||
<i class="icon fw fw-info"></i>
|
||||
There are no operations, performed yet on this device.
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<table class="table table-striped table-hover table-bordered display data-table" id="operations-log-table">
|
||||
@ -361,17 +430,27 @@
|
||||
<br>
|
||||
You are not authorized to view specified device in the system.
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<h1 class="page-sub-title">
|
||||
Device not found
|
||||
</h1>
|
||||
<br>
|
||||
You have tried to access either a removed or non-existing device.
|
||||
{{/if}}
|
||||
{{/zone}}
|
||||
{{#zone "bottomJs"}}
|
||||
{{#if isAuthorized}}
|
||||
<!--suppress HtmlUnknownTarget -->
|
||||
<script id="policy-view" src="{{@unit.publicUri}}/templates/policy-compliance.hbs"
|
||||
data-device-id="{{device.deviceIdentifier}}" data-device-type="{{device.type}}"
|
||||
data-device-id="{{deviceView.deviceIdentifier}}" data-device-type="{{deviceView.deviceType}}"
|
||||
type="text/x-handlebars-template"></script>
|
||||
<!--suppress HtmlUnknownTarget -->
|
||||
<script id="applications-list" src="{{@unit.publicUri}}/templates/applications-list.hbs"
|
||||
data-device-id="{{device.deviceIdentifier}}" data-device-type="{{device.type}}"
|
||||
data-device-id="{{deviceView.deviceIdentifier}}" data-device-type="{{deviceView.deviceType}}"
|
||||
type="text/x-handlebars-template"></script>
|
||||
<!--suppress HtmlUnknownTarget -->
|
||||
<script id="operations-log" src="{{@unit.publicUri}}/templates/operations-log.hbs"
|
||||
data-device-id="{{device.deviceIdentifier}}" data-device-type="{{device.type}}"
|
||||
data-device-id="{{deviceView.deviceIdentifier}}" data-device-type="{{deviceView.deviceType}}"
|
||||
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>
|
||||
|
||||
@ -18,88 +18,183 @@
|
||||
|
||||
function onRequest(context) {
|
||||
// var log = new Log("view.js");
|
||||
var deviceType = context.uriParams.deviceType;
|
||||
var deviceType = context["uriParams"]["deviceType"];
|
||||
var deviceId = request.getParameter("id");
|
||||
var deviceData = {};
|
||||
var deviceViewData = {};
|
||||
|
||||
if (deviceType && deviceId) {
|
||||
var deviceModule = require("/app/modules/business-controllers/device.js")["deviceModule"];
|
||||
var response = deviceModule.viewDevice(deviceType, deviceId);
|
||||
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 deviceInfo = device["properties"]["DEVICE_INFO"];
|
||||
if (deviceInfo && String(deviceInfo.toString()).length > 0) {
|
||||
deviceInfo = parse(stringify(deviceInfo));
|
||||
if (device["type"] == "ios") {
|
||||
deviceInfo = parse(deviceInfo);
|
||||
viewModel["imei"] = device["properties"]["IMEI"];
|
||||
viewModel["phoneNumber"] = deviceInfo["PhoneNumber"];
|
||||
viewModel["udid"] = deviceInfo["UDID"];
|
||||
viewModel["BatteryLevel"] = Math.round(deviceInfo["BatteryLevel"] * 100);
|
||||
viewModel["DeviceCapacity"] = Math.round(deviceInfo["DeviceCapacity"] * 100) / 100;
|
||||
viewModel["AvailableDeviceCapacity"] = Math.
|
||||
round(deviceInfo["AvailableDeviceCapacity"] * 100) / 100;
|
||||
viewModel["DeviceCapacityUsed"] = Math.
|
||||
round((viewModel["DeviceCapacity"] - viewModel["AvailableDeviceCapacity"]) * 100) / 100;
|
||||
viewModel["DeviceCapacityPercentage"] = Math.
|
||||
round(viewModel["AvailableDeviceCapacity"] / viewModel["DeviceCapacity"] * 10000) / 100;
|
||||
viewModel["location"] = {
|
||||
latitude: device["properties"]["LATITUDE"],
|
||||
longitude: device["properties"]["LONGITUDE"]
|
||||
};
|
||||
} else if (device["type"] == "android") {
|
||||
viewModel["imei"] = device["properties"]["IMEI"];
|
||||
viewModel["model"] = device["properties"]["DEVICE_MODEL"];
|
||||
viewModel["vendor"] = device["properties"]["VENDOR"];
|
||||
var osBuildDate = device["properties"]["OS_BUILD_DATE"];
|
||||
if (osBuildDate != null && osBuildDate != "0") {
|
||||
viewModel["os_build_date"] = new Date(osBuildDate * 1000);
|
||||
if (filteredDeviceData["type"]) {
|
||||
viewModel["deviceType"] = filteredDeviceData["type"];
|
||||
}
|
||||
viewModel["internal_memory"] = {};
|
||||
viewModel["external_memory"] = {};
|
||||
viewModel["location"] = {
|
||||
latitude: device["properties"]["LATITUDE"],
|
||||
longitude: device["properties"]["LONGITUDE"]
|
||||
};
|
||||
var info = {};
|
||||
var infoList = parse(deviceInfo);
|
||||
if (infoList != null && infoList != undefined) {
|
||||
for (var j = 0; j < infoList.length; j++) {
|
||||
info[infoList[j].name] = infoList[j].value;
|
||||
if (filteredDeviceData["deviceIdentifier"]) {
|
||||
viewModel["deviceIdentifier"] = filteredDeviceData["deviceIdentifier"];
|
||||
}
|
||||
if (filteredDeviceData["name"]) {
|
||||
viewModel["name"] = filteredDeviceData["name"];
|
||||
}
|
||||
if (filteredDeviceData["enrolmentInfo"]) {
|
||||
if (filteredDeviceData["enrolmentInfo"]["status"]) {
|
||||
viewModel["status"] = filteredDeviceData["enrolmentInfo"]["status"];
|
||||
}
|
||||
if (filteredDeviceData["enrolmentInfo"]["owner"]) {
|
||||
viewModel["owner"] = filteredDeviceData["enrolmentInfo"]["owner"];
|
||||
}
|
||||
if (filteredDeviceData["enrolmentInfo"]["ownership"]) {
|
||||
viewModel["ownership"] = filteredDeviceData["enrolmentInfo"]["ownership"];
|
||||
}
|
||||
}
|
||||
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"]
|
||||
};
|
||||
if (filteredDeviceData["initialDeviceInfo"]) {
|
||||
viewModel["deviceInfoAvailable"] = true;
|
||||
if (filteredDeviceData["initialDeviceInfo"]["IMEI"]) {
|
||||
viewModel["imei"] = filteredDeviceData["initialDeviceInfo"]["IMEI"];
|
||||
}
|
||||
device["viewModel"] = viewModel;
|
||||
if (!filteredDeviceData["latestDeviceInfo"]) {
|
||||
if (filteredDeviceData["initialDeviceInfo"]["OS_BUILD_DATE"]) {
|
||||
if (filteredDeviceData["initialDeviceInfo"]["OS_BUILD_DATE"] != "0") {
|
||||
viewModel["osBuildDate"] = new Date(filteredDeviceData["initialDeviceInfo"]["OS_BUILD_DATE"] * 1000);
|
||||
}
|
||||
deviceData["device"] = device;
|
||||
}
|
||||
if (filteredDeviceData["initialDeviceInfo"]["LATITUDE"] && filteredDeviceData["initialDeviceInfo"]["LONGITUDE"]) {
|
||||
viewModel["location"] = {};
|
||||
viewModel["location"]["latitude"] = filteredDeviceData["initialDeviceInfo"]["LATITUDE"];
|
||||
viewModel["location"]["longitude"] = filteredDeviceData["initialDeviceInfo"]["LONGITUDE"];
|
||||
}
|
||||
if (filteredDeviceData["initialDeviceInfo"]["VENDOR"] && filteredDeviceData["initialDeviceInfo"]["DEVICE_MODEL"]) {
|
||||
viewModel["vendor"] = filteredDeviceData["initialDeviceInfo"]["VENDOR"];
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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") {
|
||||
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-block fw-stack-2x"></i>
|
||||
</span>
|
||||
Applications Restrictions
|
||||
Application Restrictions
|
||||
<span id="app-restriction-configured" class="has-configured status-icon hidden"><i
|
||||
class="fw fw-ok"></i></span>
|
||||
<span id="app-restriction-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
|
||||
@ -73,8 +73,10 @@
|
||||
<i class="fw fw-import fw-stack-2x"></i>
|
||||
</span>
|
||||
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-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
|
||||
<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-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>
|
||||
</a>
|
||||
<a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-whitelisted-applications', this)">
|
||||
@ -82,9 +84,11 @@
|
||||
<i class="fw fw-register fw-stack-2x"></i>
|
||||
</span>
|
||||
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-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>
|
||||
</div>
|
||||
|
||||
@ -104,10 +108,8 @@
|
||||
</label>
|
||||
<hr>
|
||||
<div class="panel-title-description">
|
||||
This configuration can be used to set a passcode policy to an Android Device.
|
||||
Once this configuration profile is installed on a device, corresponding users will not be
|
||||
able
|
||||
to modify these settings on their devices.
|
||||
Configure the passcode policy for Android device. Once the policy is applied on a device,
|
||||
the device owner will not be able to modify the password settings via the device.
|
||||
</div>
|
||||
</h2>
|
||||
</div>
|
||||
@ -797,7 +799,8 @@
|
||||
</span>
|
||||
</label>
|
||||
<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="tls">TLS</option>
|
||||
<option value="ttls">TTLS</option>
|
||||
@ -829,7 +832,8 @@
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</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="1">1</option>
|
||||
<option value="2">2</option>
|
||||
@ -913,7 +917,8 @@
|
||||
</div>
|
||||
</h2>
|
||||
</div>
|
||||
<div id="app-restriction-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="app-restriction-body">
|
||||
<div id="app-restriction-body" class="panel-collapse panel-body collapse" role="tabpanel"
|
||||
aria-labelledby="app-restriction-body">
|
||||
|
||||
<div id="app-restriction-feature-error-msg" class="alert alert-danger hidden" role="alert">
|
||||
<i class="icon fw fw-error"></i><span></span>
|
||||
@ -928,7 +933,7 @@
|
||||
</label>
|
||||
<select id="app-restriction-type" class="form-control operationDataKeys" data-key="restrictionType">
|
||||
<option value="black-list" selected="selected">BlackList</option>
|
||||
<option value="white-list">White List</option>
|
||||
<option value="white-list">Whitelist</option>
|
||||
</select>
|
||||
|
||||
<div class="wr-input-control">
|
||||
@ -1195,7 +1200,7 @@
|
||||
</label>
|
||||
<hr>
|
||||
<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
|
||||
able
|
||||
to modify these settings on their devices.
|
||||
@ -1206,7 +1211,8 @@
|
||||
<div id="cosu-system-update-policy-body" class="panel-collapse panel-body collapse" role="tabpanel"
|
||||
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>
|
||||
</div>
|
||||
|
||||
@ -1221,24 +1227,31 @@
|
||||
<label class="wr-input-control radio light">
|
||||
<input id="automatic-system-update-radio-btn" type="radio" name="cosu-system-update-type"
|
||||
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
|
||||
value="automatic" 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">
|
||||
value="automatic"
|
||||
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
|
||||
</span>
|
||||
</label>
|
||||
<label class="wr-input-control radio light">
|
||||
<input id="postpone-system-update-radio-btn" type="radio" name="cosu-system-update-type"
|
||||
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
|
||||
value="postpone" 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">
|
||||
value="postpone"
|
||||
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
|
||||
</span>
|
||||
</label>
|
||||
<label class="wr-input-control radio light">
|
||||
<input id="window-system-update-radio-btn" type="radio" name="cosu-system-update-type"
|
||||
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
|
||||
value="window" 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">
|
||||
value="window"
|
||||
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
|
||||
</span>
|
||||
</label>
|
||||
@ -1339,7 +1352,8 @@
|
||||
<div id="cosu-whitelisted-applications-heading" class="panel-heading" role="tab">
|
||||
<h2 class="sub-title panel-title">
|
||||
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-toggle="collapse"
|
||||
data-target="#cosu-whitelisted-applications-body">
|
||||
<input type="checkbox"/>
|
||||
<span class="helper"></span>
|
||||
@ -1347,7 +1361,7 @@
|
||||
</label>
|
||||
<hr>
|
||||
<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
|
||||
able
|
||||
to modify these settings on their devices.
|
||||
@ -1358,18 +1372,21 @@
|
||||
<div id="cosu-whitelisted-applications-body" class="panel-collapse panel-body collapse" role="tabpanel"
|
||||
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>
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="cosu-whitelisted-applications">
|
||||
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>
|
||||
<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">
|
||||
<i class="fw fw-add fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
@ -1406,10 +1423,12 @@
|
||||
</td>
|
||||
<td data-title="Application Name / Description">
|
||||
<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=""
|
||||
placeholder="[ Application Name / Description ]"/>
|
||||
</td>
|
||||
<td data-title="Package Name">
|
||||
<input type="text" class="form-control grid-input-text" data-child-key="packageName"
|
||||
<input type="text" class="form-control grid-input-text"
|
||||
data-child-key="packageName"
|
||||
maxlength="100" data-default="" placeholder="[ Package Name ]"/>
|
||||
</td>
|
||||
<td>
|
||||
|
||||
@ -1320,7 +1320,7 @@
|
||||
</label>
|
||||
<hr>
|
||||
<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
|
||||
able
|
||||
to modify these settings on their devices.
|
||||
@ -1472,7 +1472,7 @@
|
||||
</label>
|
||||
<hr>
|
||||
<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
|
||||
able
|
||||
to modify these settings on their devices.
|
||||
|
||||
@ -231,7 +231,7 @@
|
||||
<div id="camera-heading" class="panel-heading" role="tab">
|
||||
<h2 class="sub-title panel-title">
|
||||
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"/>
|
||||
<span class="helper"></span>
|
||||
<span class="text"></span>
|
||||
@ -254,7 +254,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<input id="camera-enabled" type="checkbox" class="operationDataKeys" data-key="cameraEnabled"
|
||||
checked="checked"/>
|
||||
checked="checked" disabled/>
|
||||
<span class="helper"
|
||||
title="Having this checked would enable Usage of phone camera in the device.">
|
||||
Allow use of camera
|
||||
@ -269,7 +269,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow volume adjust
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -281,7 +281,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow configuring bluetooth.
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -294,7 +294,7 @@
|
||||
<label class="wr-input-control checkbox">
|
||||
<input id="disallow-configuring-cell-broadcast-enabled" type="checkbox"
|
||||
class="operationDataKeys"
|
||||
data-key="disallowConfigCellBroadcasts"/>
|
||||
data-key="disallowConfigCellBroadcasts" disabled/>
|
||||
<span class="helper" title="Having this checked would disallow configuring cell broadcast.">
|
||||
Disallow cell broadcast
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -307,7 +307,7 @@
|
||||
<label class="wr-input-control checkbox">
|
||||
<input id="disallow-configuring-credentials-enabled" type="checkbox"
|
||||
class="operationDataKeys"
|
||||
data-key="disallowConfigCredentials"/>
|
||||
data-key="disallowConfigCredentials" disabled/>
|
||||
<span class="helper" title="Having this checked would disallow configuring credentials.">
|
||||
Disallow configuring credentials
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -320,7 +320,7 @@
|
||||
<label class="wr-input-control checkbox">
|
||||
<input id="disallow-configuring-mobile-networkst-enabled" type="checkbox"
|
||||
class="operationDataKeys"
|
||||
data-key="disallowConfigMobileNetworks"/>
|
||||
data-key="disallowConfigMobileNetworks" disabled/>
|
||||
<span class="helper"
|
||||
title="Having this checked would disallow configuring mobile networks.">
|
||||
Disallow configuring mobile networks
|
||||
@ -334,7 +334,7 @@
|
||||
<label class="wr-input-control checkbox">
|
||||
<input id="disallow-configuring-tethering-enabled" type="checkbox"
|
||||
class="operationDataKeys"
|
||||
data-key="disallowConfigTethering"/>
|
||||
data-key="disallowConfigTethering" disabled/>
|
||||
<span class="helper" title="Having this checked would disallow configuring tethering.">
|
||||
Disallow configuring tethering
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -346,7 +346,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow configuring VPN
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -358,7 +358,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow configuring Wifi
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -371,7 +371,7 @@
|
||||
<label class="wr-input-control checkbox">
|
||||
<input id="disallow-configuring-app-control-enabled" type="checkbox"
|
||||
class="operationDataKeys"
|
||||
data-key="disallowAppControl"/>
|
||||
data-key="disallowAppControl" disabled/>
|
||||
<span class="helper" title="Having this checked would disallow configuring app control.">
|
||||
Disallow configuring app control
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -383,7 +383,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow create window
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -396,7 +396,7 @@
|
||||
<label class="wr-input-control checkbox">
|
||||
<input id="disallow-cross-profile-copy-paste-enabled" type="checkbox"
|
||||
class="operationDataKeys"
|
||||
data-key="disallowCrossProfileCopyPaste"/>
|
||||
data-key="disallowCrossProfileCopyPaste" disabled/>
|
||||
<span class="helper" title="Having this checked would disallow cross profile copy paste.">
|
||||
Disallow cross profile copy paste
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -408,7 +408,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow debuging
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -420,7 +420,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow factory reset
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -432,7 +432,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow add user
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -444,7 +444,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow install apps
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -457,7 +457,7 @@
|
||||
<label class="wr-input-control checkbox">
|
||||
<input id="disallow-installing-from-unknown-enabled" type="checkbox"
|
||||
class="operationDataKeys"
|
||||
data-key="disallowInstallUnknownSources"/>
|
||||
data-key="disallowInstallUnknownSources" disabled/>
|
||||
<span class="helper" title="Having this checked would disallow installing from unknown
|
||||
sources.">
|
||||
Disallow install from unknown sources
|
||||
@ -470,7 +470,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow modify accounts
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -482,7 +482,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow mount physical media
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -494,7 +494,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow network reset
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -506,7 +506,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow outgoing beam
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -518,7 +518,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow outgoing calls
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -530,7 +530,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow remove user
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -542,7 +542,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow safe boot
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -554,7 +554,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow location sharing
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -566,7 +566,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow SMS
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -578,7 +578,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow uninstall apps
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -590,7 +590,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow unmute microphone
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -602,7 +602,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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.">
|
||||
Disallow USB file transfer
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -615,7 +615,7 @@
|
||||
<label class="wr-input-control checkbox">
|
||||
<input id="disallow-parent-profile-app-linking-enabled" type="checkbox"
|
||||
class="operationDataKeys"
|
||||
data-key="disallowParentProfileAppLinking"/>
|
||||
data-key="disallowParentProfileAppLinking" disabled/>
|
||||
<span class="helper" title="Having this checked would disallow parent profile app linking.">
|
||||
Disallow parent profile app linking
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -627,7 +627,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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 .">
|
||||
Ensure verifying apps
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -639,7 +639,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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 .">
|
||||
Enable auto timing
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -651,7 +651,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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 .">
|
||||
Disable screen capture
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
@ -666,7 +666,7 @@
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<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 .">
|
||||
Disable status bar
|
||||
<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">
|
||||
<h2 class="sub-title panel-title">
|
||||
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" />
|
||||
<span class="helper"></span>
|
||||
<span class="text"></span>
|
||||
@ -1192,7 +1192,7 @@
|
||||
</span>
|
||||
<br>
|
||||
</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 class="wr-input-control">
|
||||
<label class="wr-input-label" for="work-profile-policy-enable-system-apps">
|
||||
@ -1203,7 +1203,7 @@
|
||||
<br>
|
||||
( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, com.google.android.calculator )
|
||||
</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 class="wr-input-control">
|
||||
<label class="wr-input-label" for="work-profile-policy-hide-system-apps">
|
||||
@ -1214,7 +1214,7 @@
|
||||
<br>
|
||||
( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, com.google.android.calculator )
|
||||
</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 class="wr-input-control">
|
||||
<label class="wr-input-label" for="work-profile-policy-unhide-system-apps">
|
||||
@ -1225,7 +1225,7 @@
|
||||
<br>
|
||||
( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, com.google.android.calculator )
|
||||
</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 class="wr-input-control">
|
||||
<label class="wr-input-label" for="passcode-policy-max-passcode-age-in-days">
|
||||
@ -1236,7 +1236,7 @@
|
||||
<br>
|
||||
( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, com.google.android.calculator )
|
||||
</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>
|
||||
@ -1257,7 +1257,7 @@
|
||||
</label>
|
||||
<hr>
|
||||
<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
|
||||
able
|
||||
to modify these settings on their devices.
|
||||
@ -1325,7 +1325,7 @@
|
||||
</label>
|
||||
<select id="cosu-system-update-policy-window-start-time"
|
||||
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="60">1 AM</option>
|
||||
<option value="120">2 AM</option>
|
||||
@ -1361,7 +1361,7 @@
|
||||
</label>
|
||||
<select id="cosu-system-update-policy-window-end-time"
|
||||
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="60">1 AM</option>
|
||||
<option value="120">2 AM</option>
|
||||
@ -1409,7 +1409,7 @@
|
||||
</label>
|
||||
<hr>
|
||||
<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
|
||||
able
|
||||
to modify these settings on their devices.
|
||||
|
||||
@ -85,11 +85,7 @@ var updateNotificationCountOnSuccess = function (data, textStatus, jqXHR) {
|
||||
if (jqXHR.status == 200 && data) {
|
||||
var responsePayload = JSON.parse(data);
|
||||
var newNotificationsCount = responsePayload["count"];
|
||||
if (newNotificationsCount > 5) {
|
||||
$(notificationBubble).html("5 <sup>+</sup> NEW");
|
||||
$(notificationBubble).removeClass("hidden");
|
||||
$(notificationSpacer).removeClass("hidden");
|
||||
} else if (newNotificationsCount <= 5 && newNotificationsCount > 0) {
|
||||
if (newNotificationsCount > 0) {
|
||||
$(notificationBubble).html(newNotificationsCount + " NEW");
|
||||
$(notificationBubble).removeClass("hidden");
|
||||
$(notificationSpacer).removeClass("hidden");
|
||||
@ -111,7 +107,7 @@ function loadNewNotificationsOnSideViewPanel() {
|
||||
if ($("#right-sidebar").attr("is-authorized") == "false") {
|
||||
$("#notification-bubble-wrapper").remove();
|
||||
} 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);
|
||||
loadNewNotifications();
|
||||
}
|
||||
@ -126,7 +122,7 @@ function loadNewNotifications() {
|
||||
var currentUser = notifications.data("currentUser");
|
||||
|
||||
$.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(
|
||||
serviceURL,
|
||||
// on success
|
||||
|
||||
@ -5,9 +5,9 @@
|
||||
<li class="message" data-type="selectable" >
|
||||
<h4>
|
||||
<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-url="../device/{{deviceType}}?id={{deviceIdentifier}}"
|
||||
data-url="device/{{deviceType}}?id={{deviceIdentifier}}"
|
||||
class="new-notification text-capitalize" data-click-event="remove-form">
|
||||
Failure on {{deviceType}} {{deviceName}}
|
||||
</a>
|
||||
|
||||
Binary file not shown.
@ -58,7 +58,7 @@
|
||||
javax.xml.bind.*,
|
||||
javax.naming,
|
||||
javax.sql,
|
||||
javax.xml.parsers,
|
||||
javax.xml.parsers; version=0.0.0,
|
||||
org.w3c.dom,
|
||||
org.wso2.carbon.context,
|
||||
org.wso2.carbon.utils.*,
|
||||
|
||||
@ -173,16 +173,18 @@
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||
<artifactId>axiom-api</artifactId>
|
||||
<groupId>org.apache.ws.commons.axiom.wso2</groupId>
|
||||
<artifactId>axiom</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<!--dependency>
|
||||
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||
<artifactId>axiom-impl</artifactId>
|
||||
</dependency>
|
||||
</dependency-->
|
||||
<dependency>
|
||||
<groupId>log4j</groupId>
|
||||
<artifactId>log4j</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
@ -206,12 +208,14 @@
|
||||
<artifactId>saaj-impl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.bouncycastle</groupId>
|
||||
<groupId>org.wso2.orbit.org.bouncycastle</groupId>
|
||||
<artifactId>bcpkix-jdk15on</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.bouncycastle</groupId>
|
||||
<groupId>org.wso2.orbit.org.bouncycastle</groupId>
|
||||
<artifactId>bcprov-jdk15on</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.plexus</groupId>
|
||||
@ -240,6 +244,7 @@
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.ws.rs</groupId>
|
||||
@ -269,6 +274,10 @@
|
||||
<groupId>org.wso2.carbon.identity</groupId>
|
||||
<artifactId>org.wso2.carbon.identity.base</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
@ -307,10 +316,12 @@
|
||||
<dependency>
|
||||
<groupId>org.wso2.tomcat</groupId>
|
||||
<artifactId>tomcat-servlet-api</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
|
||||
@ -77,8 +77,8 @@ public class OperationHandler {
|
||||
}
|
||||
} else if (Constants.SyncMLResponseCodes.PIN_NOTFOUND.equals(status.getData())) {
|
||||
for (Operation operation : pendingDataOperations) {
|
||||
if (operation.getId() == status.getCommandReference() && (OperationCode.Command.DEVICE_LOCK.equals(
|
||||
operation.getCode()))) {
|
||||
if (operation.getId() == status.getCommandReference() &&
|
||||
(PluginConstants.OperationCodes.DEVICE_LOCK.equals(operation.getCode()))) {
|
||||
operation.setStatus(Operation.Status.ERROR);
|
||||
if (syncmlDocument.getHeader().getSource().getLocURI() != null) {
|
||||
updateStatus(syncmlDocument.getHeader().getSource().getLocURI(), pendingDataOperations);
|
||||
@ -394,7 +394,6 @@ public class OperationHandler {
|
||||
Notification notification = new Notification();
|
||||
notification.setDescription("Auto generated DevicePin : " + pinValue);
|
||||
notification.setOperationId(result.getCommandReference());
|
||||
// notification.setDeviceIdentifier(deviceIdentifier);
|
||||
notification.setStatus(String.valueOf(Notification.Status.NEW));
|
||||
try {
|
||||
nmService.addNotification(deviceIdentifier, notification);
|
||||
|
||||
@ -183,6 +183,7 @@ public interface ConfigurationMgtService {
|
||||
code = 500,
|
||||
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(
|
||||
@ApiParam(
|
||||
name = "If-Modified-Since",
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
|
||||
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.services.authbst.beans.Credentials;
|
||||
|
||||
@ -36,5 +37,6 @@ public interface BSTProvider {
|
||||
@POST
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@Path("/authentication")
|
||||
@Permission(name = "Enroll Device", permission = "/device-mgt/devices/enroll/windows")
|
||||
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}
|
||||
</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>
|
||||
</bundles>
|
||||
<importFeatures>
|
||||
|
||||
143
pom.xml
143
pom.xml
@ -37,8 +37,10 @@
|
||||
<modules>
|
||||
<module>components/mobile-plugins</module>
|
||||
<module>components/iot-plugins</module>
|
||||
<module>components/extensions</module>
|
||||
<module>features/mobile-plugins-feature</module>
|
||||
<module>features/iot-plugins-feature</module>
|
||||
<module>features/extensions-feature</module>
|
||||
</modules>
|
||||
|
||||
<dependencyManagement>
|
||||
@ -527,6 +529,13 @@
|
||||
<version>${carbon.devicemgt.plugins.version}</version>
|
||||
</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-->
|
||||
<dependency>
|
||||
<groupId>org.eclipse.osgi</groupId>
|
||||
@ -623,10 +632,6 @@
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.identity.oauth</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.apimgt.keymgt.client</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
@ -716,6 +721,63 @@
|
||||
<artifactId>org.wso2.carbon.registry.api</artifactId>
|
||||
<version>${carbon.kernel.version}</version>
|
||||
</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>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.registry.core</artifactId>
|
||||
@ -912,14 +974,24 @@
|
||||
<version>${wss4j.security.common.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||
<artifactId>axiom-api</artifactId>
|
||||
<groupId>org.apache.ws.commons.axiom.wso2</groupId>
|
||||
<artifactId>axiom</artifactId>
|
||||
<version>${axiom-api.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<!--dependency>
|
||||
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||
<artifactId>axiom-impl</artifactId>
|
||||
<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>
|
||||
<groupId>log4j</groupId>
|
||||
@ -952,14 +1024,14 @@
|
||||
<version>${saaj-impl.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.bouncycastle</groupId>
|
||||
<groupId>org.wso2.orbit.org.bouncycastle</groupId>
|
||||
<artifactId>bcpkix-jdk15on</artifactId>
|
||||
<version>${bcpkix-jdk15on.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.bouncycastle</groupId>
|
||||
<groupId>org.wso2.orbit.org.bouncycastle</groupId>
|
||||
<artifactId>bcprov-jdk15on</artifactId>
|
||||
<version>${bcpkix-jdk15on.version}</version>
|
||||
<version>${bcprov-jdk15on.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.plexus</groupId>
|
||||
@ -988,25 +1060,30 @@
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>${commons-io.version}</version>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>org.apache.felix.scr</artifactId>
|
||||
<version>${apache-felix.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.googlecode.json-simple.wso2</groupId>
|
||||
<artifactId>json-simple</artifactId>
|
||||
<version>${json-simple.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.googlecode.plist</groupId>
|
||||
<artifactId>dd-plist</artifactId>
|
||||
<version>${googlecode.plist.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.identity</groupId>
|
||||
<artifactId>org.wso2.carbon.identity.oauth.stub</artifactId>
|
||||
<version>${carbon.identity.version}</version>
|
||||
<version>${identity.inbound.auth.oauth.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.identity</groupId>
|
||||
<artifactId>org.wso2.carbon.identity.oauth</artifactId>
|
||||
<version>${carbon.identity.version}</version>
|
||||
<version>${identity.inbound.auth.oauth.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
@ -1092,7 +1169,7 @@
|
||||
<wso2.maven.compiler.target>1.7</wso2.maven.compiler.target>
|
||||
|
||||
<!--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.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.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.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 Deployment -->
|
||||
<carbon.deployment.version>4.6.0</carbon.deployment.version>
|
||||
<carbon.deployment.version>4.7.0</carbon.deployment.version>
|
||||
|
||||
<!-- 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 Multi-tenancy -->
|
||||
<carbon.multitenancy.version>4.5.0</carbon.multitenancy.version>
|
||||
<carbon.multitenancy.version>4.6.0</carbon.multitenancy.version>
|
||||
|
||||
<!-- Carbon Registry -->
|
||||
<carbon.registry.version>4.4.8</carbon.registry.version>
|
||||
<carbon.registry.version>4.5.6</carbon.registry.version>
|
||||
|
||||
<!-- 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.mgt.version>5.0.5</carbon.api.mgt.version>
|
||||
<carbon.api.mgt.version>6.0.5</carbon.api.mgt.version>
|
||||
|
||||
<!-- XMPP/MQTT Version -->
|
||||
<smack.wso2.version>3.0.4.wso2v1</smack.wso2.version>
|
||||
@ -1165,8 +1248,8 @@
|
||||
<swagger.version>1.5.8</swagger.version>
|
||||
|
||||
<!-- Carbon Analytics -->
|
||||
<carbon.analytics.common.version>5.0.11</carbon.analytics.common.version>
|
||||
<carbon.analytics.common.version.range>[5.0.11,6.0.0)</carbon.analytics.common.version.range>
|
||||
<carbon.analytics.common.version>5.1.3</carbon.analytics.common.version>
|
||||
<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.range>[1.0.5,2.0.0]</carbon.analytics.version.range>
|
||||
|
||||
@ -1177,6 +1260,11 @@
|
||||
<codehaus.plexus.version>3.0.21</codehaus.plexus.version>
|
||||
<google.gson.version>2.2.4</google.gson.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>
|
||||
<!--<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>
|
||||
|
||||
<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>
|
||||
<spring-web.version>3.0.5.RELEASE</spring-web.version>
|
||||
<spring-ws-security.version>2.1.0.RELEASE</spring-ws-security.version>
|
||||
<jaxws-rt.version>2.2.8</jaxws-rt.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>
|
||||
<joda-time.version>2.2</joda-time.version>
|
||||
<wss4j.security.version>1.6.17</wss4j.security.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.range>(3.0.0, 4.0.0]</commons-json.version.range>
|
||||
<json.path.version>0.9.1</json.path.version>
|
||||
@ -1227,6 +1315,7 @@
|
||||
<servlet-api.version>2.5</servlet-api.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>
|
||||
|
||||
<scm>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user