Merge branch 'iots-54' into 'master'

Fix issues with APPM Connector

Closes product-iots#55 and product-iots#54

See merge request entgra/carbon-device-mgt-plugins!18
revert-dabc3590
Dharmakeerthi Lasantha 6 years ago
commit 0b1deff245

@ -39,6 +39,8 @@ 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.authorization.DeviceAccessAuthorizationException;
import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationService;
import org.wso2.carbon.device.mgt.common.operation.mgt.Activity;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
import org.wso2.carbon.appmgt.mobile.utils.User;
@ -57,15 +59,14 @@ import java.util.List;
import java.util.Properties;
public class ApplicationOperationsImpl implements ApplicationOperations {
private static final Log log = LogFactory.getLog(ApplicationOperationsImpl.class);
public static final String MEDIA_TYPE_XML = "application/xml";
public static final String INSTALL = "install";
public static final String UNINSTALL = "uninstall";
private static final String MEDIA_TYPE_XML = "application/xml";
private static final String INSTALL = "install";
private static final String UNINSTALL = "uninstall";
/**
* @param applicationOperationAction holds the information needs to perform an action on mdm.
* @throws MobileApplicationException
* @throws MobileApplicationException If error occurred while performing the action.
*/
public String performAction(ApplicationOperationAction applicationOperationAction)
throws MobileApplicationException {
@ -73,7 +74,6 @@ public class ApplicationOperationsImpl implements ApplicationOperations {
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;
@ -82,11 +82,9 @@ public class ApplicationOperationsImpl implements ApplicationOperations {
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 (MDMAppConstants.WEBAPP.equals(applicationOperationAction.getApp().getPlatform()) ||
applicationOperationAction.getApp().getPlatform().equalsIgnoreCase(device.getType())) {
@ -98,8 +96,7 @@ public class ApplicationOperationsImpl implements ApplicationOperations {
}
}
} catch (DeviceManagementException devEx) {
String errorMsg = "Error occurred fetch device for user " + userName +
" at app installation";
String errorMsg = "Error occurred fetch device for user " + userName + " at app installation";
logError(errorMsg, devEx);
throw new MobileApplicationException(errorMsg, devEx);
}
@ -108,11 +105,9 @@ public class ApplicationOperationsImpl implements ApplicationOperations {
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) {
if (MDMAppConstants.ACTIVE.equalsIgnoreCase(device.getEnrolmentInfo().getStatus().toString())) {
deviceIdentifiers.add(getDeviceIdentifierByDevice(device));
@ -120,12 +115,10 @@ public class ApplicationOperationsImpl implements ApplicationOperations {
}
}
} catch (DeviceManagementException devMgtEx) {
String errorMsg = "Error occurred fetch device for user role " + userRole +
" at app installation";
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()) {
@ -141,7 +134,6 @@ public class ApplicationOperationsImpl implements ApplicationOperations {
logError("Device Identifier is not valid json object.", e);
throw new MobileApplicationException(e);
}
}
}
} else {
@ -206,16 +198,11 @@ public class ApplicationOperationsImpl implements ApplicationOperations {
}
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());
@ -223,49 +210,57 @@ public class ApplicationOperationsImpl implements ApplicationOperations {
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) {
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
* @throws MobileApplicationException If an error occurred in getting devices or if app platform is not supported.
*/
public List<Device> getDevices(ApplicationOperationDevice applicationOperationDevice)
throws MobileApplicationException {
List<Device> devices;
List<org.wso2.carbon.device.mgt.common.Device> deviceList = null;
List<org.wso2.carbon.device.mgt.common.Device> deviceList;
try {
DeviceManagementProviderService deviceManagementService = MDMServiceAPIUtils
.getDeviceManagementService(applicationOperationDevice.getTenantId());
final int tenantId = applicationOperationDevice.getTenantId();
final String username = applicationOperationDevice.getCurrentUser().getUsername();
if (MDMAppConstants.WEBAPP.equals
(applicationOperationDevice.getPlatform())) {
deviceList = deviceManagementService.
getDevicesOfUser(username);
} else {
deviceList = deviceManagementService.
getDevicesOfUser(username,
MDMAppConstants.ANDROID);
deviceList.addAll(deviceManagementService.
getDevicesOfUser(username,
MDMAppConstants.IOS));
final String platform = applicationOperationDevice.getPlatform();
DeviceAccessAuthorizationService deviceAccessAuthorizationService = MDMServiceAPIUtils
.getDeviceAccessAuthorizationService(applicationOperationDevice.getTenantId());
DeviceManagementProviderService deviceManagementService = MDMServiceAPIUtils
.getDeviceManagementService(tenantId);
boolean isAdmin = deviceAccessAuthorizationService.isDeviceAdminUser();
switch (platform) {
case MDMAppConstants.WEBAPP:
deviceList = isAdmin ? deviceManagementService.getAllDevices() :
deviceManagementService.getDevicesOfUser(username);
break;
case MDMAppConstants.ANDROID:
deviceList = isAdmin ? deviceManagementService.getAllDevices(MDMAppConstants.ANDROID) :
deviceManagementService.getDevicesOfUser(username, MDMAppConstants.ANDROID);
break;
case MDMAppConstants.IOS:
deviceList = isAdmin ? deviceManagementService.getAllDevices(MDMAppConstants.IOS) :
deviceManagementService.getDevicesOfUser(username, MDMAppConstants.IOS);
break;
default:
throw new MobileApplicationException("App platform: [" + platform + "] is not supported.");
}
devices = new ArrayList<>(deviceList.size());
if (log.isDebugEnabled()) {
log.debug("device list got from mdm " + deviceList.toString());
@ -305,7 +300,8 @@ public class ApplicationOperationsImpl implements ApplicationOperations {
} catch (DeviceManagementException e) {
logError("Error While retrieving Device List.", e);
throw new MobileApplicationException(e.getMessage());
} catch (DeviceAccessAuthorizationException e) {
throw new MobileApplicationException("Error while checking user permissions", e);
}
return devices;
}
@ -328,7 +324,7 @@ public class ApplicationOperationsImpl implements ApplicationOperations {
}
}
public static UserStoreManager getUserStoreManager() throws UserStoreException {
private static UserStoreManager getUserStoreManager() throws UserStoreException {
RealmService realmService;
UserStoreManager userStoreManager;
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
@ -366,7 +362,6 @@ public class ApplicationOperationsImpl implements ApplicationOperations {
@Override
public void run() {
try {
PrivilegedCarbonContext.startTenantFlow();
PrivilegedCarbonContext privilegedCarbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext();
@ -460,6 +455,4 @@ public class ApplicationOperationsImpl implements ApplicationOperations {
}
}
}
}

@ -19,6 +19,7 @@ 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.common.authorization.DeviceAccessAuthorizationService;
import org.wso2.carbon.device.mgt.core.app.mgt.ApplicationManagementProviderService;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
@ -49,6 +50,26 @@ public class MDMServiceAPIUtils {
return deviceManagementProviderService;
}
/**
* Returns the DeviceAccessAuthorizationService osgi service.
*
* @param tenantId tenant id
* @return {@link DeviceAccessAuthorizationService}
*/
public static DeviceAccessAuthorizationService getDeviceAccessAuthorizationService(int tenantId) {
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
ctx.setTenantId(tenantId, true);
DeviceAccessAuthorizationService deviceAccessAuthorizationService =
(DeviceAccessAuthorizationService) ctx
.getOSGiService(DeviceAccessAuthorizationService.class, null);
if (deviceAccessAuthorizationService == null) {
String msg = "Device Access Authorization service has not initialized.";
log.error(msg);
throw new IllegalStateException(msg);
}
return deviceAccessAuthorizationService;
}
/**
* Returns the ApplicationManagementProviderService osgi service.
*

Loading…
Cancel
Save