Merge branch 'master' into 'master'

Add an API to get enrollment QR code payload

Closes product-iots#319

See merge request entgra/carbon-device-mgt-plugins!137
revert-dabc3590
Saad Sahibjan 5 years ago
commit 4d18ec0507

@ -246,4 +246,44 @@ public interface DeviceTypeConfigurationAPI {
"Example: Mon, 05 Jan 2014 15:10:00 +0200.")
@HeaderParam("If-Modified-Since") String ifModifiedSince);
@GET
@Path("/enrollment-qr-config/{ownershipType}")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(
produces = MediaType.APPLICATION_JSON,
httpMethod = "GET",
value = "Getting the Enrollment QR config for device type Android",
notes = "Use this REST API to retrieve the Enrollment QR Config that is used for the Android device " +
"enrollment.",
tags = "Android Configuration Management",
extensions = {
@Extension(properties = {
@ExtensionProperty(name = AndroidConstants.SCOPE, value = "perm:android:enroll")
})
}
)
@ApiResponses(value = {
@ApiResponse(
code = 400,
message = "Bad Request. \n Invalid request."),
@ApiResponse(
code = 200,
message = "OK. \n Successfully fetched Android Enrollment QR configuration.",
response = String.class,
responseHeaders = {
@ResponseHeader(
name = "Content-Type",
description = "Content type of the body")
}),
@ApiResponse(
code = 500,
message = "Internal Server Error. \n Server error occurred while fetching the Android Enrollment QR"
+ " configuration.")
})
Response getQRConfig(
@ApiParam(
name = "ownershipType",
value = "The ownership type that device has enrolled.",
required = true)
@PathParam("ownershipType") String ownershipType);
}

@ -142,18 +142,18 @@ public class DeviceManagementAPIImpl implements DeviceManagementAPI {
String msg = "Device identifier is invalid. Device identifier " + id;
log.error(msg, e);
return Response.status(Response.Status.NOT_FOUND).entity(msg).build();
} catch (DeviceManagementException e) {
String msg = "Error occurred while getting pending operations of the device.";
log.error(msg, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
.setMessage(msg).build()).build();
} catch (AndroidDeviceMgtPluginException e) {
String errorMessage = "Error occured while executing get pending operations";
log.error(errorMessage, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
.setMessage(errorMessage).build()).build();
} catch (DeviceManagementException e) {
String msg = "Error occurred while getting pending operations of the device.";
log.error(msg, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
.setMessage(msg).build()).build();
}
}
@ -198,19 +198,19 @@ public class DeviceManagementAPIImpl implements DeviceManagementAPI {
}
return Response.status(Integer.parseInt(message.getResponseCode()))
.entity(message.getResponseMessage()).build();
} catch (DeviceManagementException e) {
String msg = "Error occurred while enrolling the android, which carries the id '" +
androidDevice.getDeviceIdentifier() + "'";
log.error(msg, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
.setMessage(msg).build()).build();
} catch (AndroidDeviceMgtPluginException e) {
String errorMessage = "Error occured while enrolling device";
log.error(errorMessage, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
.setMessage(errorMessage).build()).build();
} catch (DeviceManagementException e) {
String msg = "Error occurred while enrolling the android, which carries the id '" + androidDevice
.getDeviceIdentifier() + "'";
log.error(msg, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
.setMessage(msg).build()).build();
}
}
@ -251,31 +251,31 @@ public class DeviceManagementAPIImpl implements DeviceManagementAPI {
"carries the id '" + id + "' has not been updated");
return Response.status(Response.Status.NOT_MODIFIED).entity(responseMessage).build();
}
} catch (DeviceManagementException e) {
String msg = "Error occurred while modifying enrollment of the Android device that carries the id '" +
id + "'";
log.error(msg, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
.setMessage(msg).build()).build();
} catch (BadRequestException e){
} catch (BadRequestException e) {
String errorMessage = "The payload of the android device enrollment is incorrect.";
log.error(errorMessage, e);
return Response.status(Response.Status.BAD_REQUEST).entity(
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_BAD_REQUEST)
return Response.status(Response.Status.BAD_REQUEST)
.entity(new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_BAD_REQUEST)
.setMessage(errorMessage).build()).build();
} catch (NotFoundException e) {
String errorMessage = "The device to be modified doesn't exist.";
log.error(errorMessage, e);
return Response.status(Response.Status.NOT_FOUND).entity(
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_NOT_FOUND)
return Response.status(Response.Status.NOT_FOUND)
.entity(new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_NOT_FOUND)
.setMessage(errorMessage).build()).build();
} catch (AndroidDeviceMgtPluginException e) {
String errorMessage = "Error occured while modifying enrollment";
log.error(errorMessage, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
.setMessage(errorMessage).build()).build();
} catch (DeviceManagementException e) {
String msg =
"Error occurred while modifying enrollment of the Android device that carries the id '" + id + "'";
log.error(msg, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
.setMessage(msg).build()).build();
}
}

@ -39,7 +39,9 @@ import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.mgt.common.DeviceManagementConstants;
import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.exceptions.InvalidConfigurationException;
import org.wso2.carbon.device.mgt.common.license.mgt.License;
import org.wso2.carbon.device.mgt.common.spi.DeviceTypeCommonService;
import org.wso2.carbon.device.mgt.mobile.android.api.DeviceTypeConfigurationAPI;
import org.wso2.carbon.device.mgt.mobile.android.common.bean.AndroidPlatformConfiguration;
import org.wso2.carbon.device.mgt.mobile.android.common.bean.ErrorResponse;
@ -54,9 +56,11 @@ import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.Map;
@Path("/configuration")
@Produces(MediaType.APPLICATION_JSON)
@ -125,4 +129,35 @@ public class DeviceTypeConfigurationAPIImpl implements DeviceTypeConfigurationAP
.setMessage(msg).build()).build();
}
}
@GET
@Path("/enrollment-qr-config/{ownershipType}")
@Produces(MediaType.APPLICATION_JSON)
public Response getQRConfig(
@PathParam("ownershipType") String ownershipType) {
try {
DeviceTypeCommonService deviceTypeCommonService = AndroidAPIUtils.getDeviceTypeCommonService();
Map<String, Object> enrollmentQRConfig = deviceTypeCommonService.getEnrollmentQRCode(ownershipType);
if (enrollmentQRConfig.isEmpty()) {
String msg = "Couldn't find Enrollment QR code config for Android. Please contact administrator.";
log.error(msg);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
}
return Response.status(Response.Status.OK).entity(enrollmentQRConfig).build();
} catch (BadRequestException e) {
String msg = "Bad Request, trying to get Enrollment QR code for invalid device ownership type "
+ ownershipType;
log.error(msg, e);
return Response.status(Response.Status.BAD_REQUEST).entity(msg).build();
} catch (DeviceManagementException e) {
String msg = "Error occurred while retrieving the license configured for Android device enrolment";
log.error(msg, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
} catch (InvalidConfigurationException e) {
String msg = "Platform configuration is not configured properly to generate QR code for the Android "
+ "enrollment. Device ownership mode is " + ownershipType;
log.error(msg, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
}
}
}

@ -54,23 +54,23 @@ public class EventReceiverAPIImpl implements EventReceiverAPI {
AndroidService androidService = AndroidAPIUtils.getAndroidService();
Message message = androidService.publishEvents(eventBeanWrapper);
return Response.status(Integer.parseInt(message.getResponseCode())).entity(message.getResponseMessage()).build();
} catch (DeviceManagementException e) {
String errorMessage = "Error occurred while checking Operation Analytics is Enabled.";
log.error(errorMessage, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
.setMessage(errorMessage).build()).build();
} catch (UnexpectedServerErrorException e) {
String errorMessage = "Error occurred while getting the Data publisher Service instance.";
log.error(errorMessage, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
.setMessage(errorMessage).build()).build();
} catch (AndroidDeviceMgtPluginException e){
} catch (AndroidDeviceMgtPluginException e) {
String errorMessage = "Error occurred while publishing events.";
log.error(errorMessage, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
.setMessage(errorMessage).build()).build();
} catch (DeviceManagementException e) {
String errorMessage = "Error occurred while checking Operation Analytics is Enabled.";
log.error(errorMessage, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatusCodes.STATUS_CODE_SERVER_ERROR)
.setMessage(errorMessage).build()).build();
}
}

@ -52,6 +52,8 @@
package org.wso2.carbon.device.mgt.mobile.android.common;
import com.sun.org.apache.bcel.internal.generic.ATHROW;
/**
* Defines constants used in Android-REST API bundle.
*/
@ -227,4 +229,28 @@ public final class AndroidConstants {
}
public final class PlatformConfigs {
private PlatformConfigs() { throw new AssertionError(); }
public final class KioskConfigs {
private KioskConfigs() { throw new AssertionError(); }
public static final String ADMIN_COMPONENT_NAME = "android.app.extra.PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME";
public static final String WIFI_SSID = "android.app.extra.PROVISIONING_WIFI_SSID";
public static final String WIFI_PASSWORD = "android.app.extra.PROVISIONING_WIFI_PASSWORD";
public static final String WIFI_SECURITY = "android.app.extra.PROVISIONING_WIFI_SECURITY_TYPE";
public static final String SKIP_ENCRYPTION = "android.app.extra.PROVISIONING_SKIP_ENCRYPTION";
public static final String CHECKSUM = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM";
public static final String DOWNLOAD_URL = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION";
public static final String ANDROID_EXTRA = "android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE";
}
public final class DefaultConfigs {
private DefaultConfigs() { throw new AssertionError(); }
public static final String ACCESS_TOKEN = "android.app.extra.token";
public static final String DEFAULT_OWNERSHIP = "android.app.extra.defaultOwner";
public static final String SERVER_IP = "android.app.extra.serverIp";
}
}
}

@ -17,8 +17,9 @@
*/
package org.wso2.carbon.device.mgt.mobile.android.common.exception;
import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException;
public class AndroidDeviceMgtPluginException extends Exception{
public class AndroidDeviceMgtPluginException extends DeviceManagementException {
private static final long serialVersionUID = -2297311387874900305L;
private String errorMessage;

@ -85,6 +85,7 @@
org.wso2.carbon.device.application.mgt.common.*,
org.wso2.carbon.user.core.*,
org.wso2.carbon.user.api.*,
org.wso2.carbon.identity.jwt.client.extension.*,
org.apache.commons.httpclient,
org.apache.http,
org.apache.http.client.methods,

@ -17,59 +17,217 @@
package org.wso2.carbon.device.mgt.mobile.android.core.impl;
import org.wso2.carbon.base.ServerConfiguration;
import org.wso2.carbon.device.mgt.common.DeviceManagementConstants;
import org.apache.commons.lang.StringUtils;
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.AppRegistrationCredentials;
import org.wso2.carbon.device.mgt.common.ApplicationRegistrationException;
import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
import org.wso2.carbon.device.mgt.common.MDMAppConstants;
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry;
import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.license.mgt.License;
import org.wso2.carbon.device.mgt.common.exceptions.InvalidConfigurationException;
import org.wso2.carbon.device.mgt.common.spi.DeviceTypeCommonService;
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
import org.wso2.carbon.device.mgt.core.config.DeviceManagementConfig;
import org.wso2.carbon.device.mgt.core.config.keymanager.KeyManagerConfigurations;
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
import org.wso2.carbon.device.mgt.mobile.android.common.AndroidConstants;
import org.wso2.carbon.device.mgt.mobile.android.common.exception.BadRequestException;
import org.wso2.carbon.device.mgt.mobile.android.common.spi.AndroidService;
import org.wso2.carbon.device.mgt.mobile.android.core.util.AndroidAPIUtils;
import org.wso2.carbon.identity.jwt.client.extension.dto.AccessTokenInfo;
import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientException;
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class DeviceTypeCommonServiceImpl implements DeviceTypeCommonService {
private static final Log log = LogFactory.getLog(DeviceTypeCommonServiceImpl.class);
@Override
public Map<EnrolmentInfo.OwnerShip, String> getEnrollmentQRCode() throws DeviceManagementException {
return null;
public Map<String, Object> getEnrollmentQRCode(String ownershipType) throws DeviceManagementException {
AndroidService androidService = AndroidAPIUtils.getAndroidService();
PlatformConfiguration platformConfiguration = androidService.getPlatformConfig();
Map<String, Object> qrEnrollmentPayload = new HashMap<>();
Map<String, Object> defaultQREnrollmentPayload = new HashMap<>();
if (Arrays.stream(EnrolmentInfo.OwnerShip.values())
.noneMatch(ownerShip -> ownerShip.toString().equalsIgnoreCase(ownershipType))) {
String msg = "Request to get QR enrollment code for invalid device ownership type " + ownershipType;
log.error(msg);
throw new BadRequestException(msg);
}
String accessToken = getAccessTokenToEnroll();
if (StringUtils.isBlank(accessToken)) {
String msg = "Couldn't get a access token for user " + PrivilegedCarbonContext.getThreadLocalCarbonContext()
.getUsername();
log.error(msg);
throw new DeviceManagementException(msg);
}
for (ConfigurationEntry configEntry : platformConfiguration.getConfiguration()) {
if (AndroidConstants.PlatformConfigs.DefaultConfigs.DEFAULT_OWNERSHIP.equals(configEntry.getName())) {
defaultQREnrollmentPayload
.put(AndroidConstants.PlatformConfigs.DefaultConfigs.DEFAULT_OWNERSHIP, configEntry.getValue());
}
if (AndroidConstants.PlatformConfigs.DefaultConfigs.SERVER_IP.equals(configEntry.getName())) {
defaultQREnrollmentPayload
.put(AndroidConstants.PlatformConfigs.DefaultConfigs.SERVER_IP, configEntry.getValue());
}
if (EnrolmentInfo.OwnerShip.COSU.toString().equalsIgnoreCase(ownershipType) || EnrolmentInfo.OwnerShip.COPE
.toString().equalsIgnoreCase(ownershipType)) {
if (AndroidConstants.PlatformConfigs.KioskConfigs.ADMIN_COMPONENT_NAME.equals(configEntry.getName())) {
qrEnrollmentPayload.put(AndroidConstants.PlatformConfigs.KioskConfigs.ADMIN_COMPONENT_NAME,
configEntry.getValue());
} else if (AndroidConstants.PlatformConfigs.KioskConfigs.WIFI_SSID.equals(configEntry.getName())) {
qrEnrollmentPayload
.put(AndroidConstants.PlatformConfigs.KioskConfigs.WIFI_SSID, configEntry.getValue());
} else if (AndroidConstants.PlatformConfigs.KioskConfigs.WIFI_PASSWORD.equals(configEntry.getName())) {
qrEnrollmentPayload
.put(AndroidConstants.PlatformConfigs.KioskConfigs.WIFI_PASSWORD, configEntry.getValue());
} else if (AndroidConstants.PlatformConfigs.KioskConfigs.WIFI_SECURITY.equals(configEntry.getName())) {
qrEnrollmentPayload
.put(AndroidConstants.PlatformConfigs.KioskConfigs.WIFI_SECURITY, configEntry.getValue());
} else if (AndroidConstants.PlatformConfigs.KioskConfigs.CHECKSUM.equals(configEntry.getName())) {
qrEnrollmentPayload
.put(AndroidConstants.PlatformConfigs.KioskConfigs.CHECKSUM, configEntry.getValue());
} else if (AndroidConstants.PlatformConfigs.KioskConfigs.DOWNLOAD_URL.equals(configEntry.getName())) {
qrEnrollmentPayload
.put(AndroidConstants.PlatformConfigs.KioskConfigs.DOWNLOAD_URL, configEntry.getValue());
} else if (AndroidConstants.PlatformConfigs.KioskConfigs.SKIP_ENCRYPTION
.equals(configEntry.getName())) {
qrEnrollmentPayload
.put(AndroidConstants.PlatformConfigs.KioskConfigs.SKIP_ENCRYPTION, configEntry.getValue());
}
}
}
defaultQREnrollmentPayload.put(AndroidConstants.PlatformConfigs.DefaultConfigs.ACCESS_TOKEN, accessToken);
qrEnrollmentPayload
.put(AndroidConstants.PlatformConfigs.KioskConfigs.ANDROID_EXTRA, defaultQREnrollmentPayload);
validateQREnrollmentPayload(qrEnrollmentPayload, ownershipType);
return qrEnrollmentPayload;
}
// private void getPlatformConfig() {
// PlatformConfiguration platformConfiguration;
// List<ConfigurationEntry> configs;
// try {
// platformConfiguration = AndroidAPIUtils.getDeviceManagementService().
// getConfiguration(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID);
// if (platformConfiguration != null) {
// configs = platformConfiguration.getConfiguration();
// } else {
// platformConfiguration = new PlatformConfiguration();
// configs = new ArrayList<>();
// }
// ConfigurationEntry entry = new ConfigurationEntry();
// License license = AndroidAPIUtils.getDeviceManagementService().getLicense(
// DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID, MDMAppConstants.AndroidConstants.
// TenantConfigProperties.LANGUAGE_US);
//
// if (configs != null) {
// ConfigurationEntry versionEntry = new ConfigurationEntry();
// versionEntry.setContentType(AndroidConstants.TenantConfigProperties.CONTENT_TYPE_TEXT);
// versionEntry.setName(AndroidConstants.TenantConfigProperties.SERVER_VERSION);
// versionEntry.setValue(ServerConfiguration.getInstance().getFirstProperty("Version"));
// configs.add(versionEntry);
// if (license != null) {
// entry.setContentType(AndroidConstants.TenantConfigProperties.CONTENT_TYPE_TEXT);
// entry.setName(AndroidConstants.TenantConfigProperties.LICENSE_KEY);
// entry.setValue(license.getText());
// configs.add(entry);
// }
// platformConfiguration.setConfiguration(configs);
// }
// }
/**
* To get Access token for device enroll scope.
*
* @return Access token
* @throws DeviceManagementException if error occurred when trying to get access token for device enroll scope.
*/
private String getAccessTokenToEnroll() throws DeviceManagementException {
DeviceManagementConfig deviceManagementConfig = DeviceConfigurationManager.getInstance()
.getDeviceManagementConfig();
KeyManagerConfigurations kmConfig = deviceManagementConfig.getKeyManagerConfigurations();
try {
AppRegistrationCredentials credentials = DeviceManagerUtil.getApplicationRegistrationCredentials(
System.getProperty(
org.wso2.carbon.device.mgt.core.DeviceManagementConstants.ConfigurationManagement.IOT_GATEWAY_HOST),
System.getProperty(
org.wso2.carbon.device.mgt.core.DeviceManagementConstants.ConfigurationManagement.IOT_GATEWAY_HTTPS_PORT),
kmConfig.getAdminUsername(), kmConfig.getAdminPassword());
AccessTokenInfo accessTokenForAdmin = DeviceManagerUtil
.getAccessTokenForDeviceOwner("perm:device:enroll", credentials.getClient_id(),
credentials.getClient_secret(),
PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername());
return accessTokenForAdmin.getAccessToken();
} catch (ApplicationRegistrationException e) {
String msg = "Error occurred while registering Application to get access token to create enrollment QR code "
+ "payload.";
log.error(msg);
throw new DeviceManagementException(msg, e);
} catch (JWTClientException e) {
String msg = "JWT Error occurred while registering Application to get access token to create enrollment "
+ "QR code payload.";
log.error(msg, e);
throw new DeviceManagementException(msg, e);
}
}
/**
* Validate the QR enrollment payload
*
* @param payload Configs use to generate Enrollment QR code
* @param ownershipType Device enrollment type
*/
private void validateQREnrollmentPayload(Map<String, Object> payload,
String ownershipType) {
boolean isInvalidConfig = false;
String invalidPlatformConfigs = "";
if (payload.get(AndroidConstants.PlatformConfigs.KioskConfigs.ANDROID_EXTRA) == null) {
invalidPlatformConfigs += AndroidConstants.PlatformConfigs.KioskConfigs.ANDROID_EXTRA + ", ";
isInvalidConfig = true;
} else {
Map<String, Object> defaultPayload = (Map<String, Object>) payload
.get(AndroidConstants.PlatformConfigs.KioskConfigs.ANDROID_EXTRA);
if (StringUtils.isBlank(
(String) defaultPayload.get(AndroidConstants.PlatformConfigs.DefaultConfigs.DEFAULT_OWNERSHIP))) {
invalidPlatformConfigs += AndroidConstants.PlatformConfigs.DefaultConfigs.DEFAULT_OWNERSHIP + ", ";
isInvalidConfig = true;
}
if (StringUtils
.isBlank((String) defaultPayload.get(AndroidConstants.PlatformConfigs.DefaultConfigs.SERVER_IP))) {
invalidPlatformConfigs += AndroidConstants.PlatformConfigs.DefaultConfigs.SERVER_IP + ", ";
isInvalidConfig = true;
}
if (StringUtils.isBlank(
(String) defaultPayload.get(AndroidConstants.PlatformConfigs.DefaultConfigs.ACCESS_TOKEN))) {
invalidPlatformConfigs += AndroidConstants.PlatformConfigs.DefaultConfigs.ACCESS_TOKEN + ", ";
isInvalidConfig = true;
}
}
if (EnrolmentInfo.OwnerShip.COSU.toString().equalsIgnoreCase(ownershipType) || EnrolmentInfo.OwnerShip.COPE
.toString().equalsIgnoreCase(ownershipType)) {
if (StringUtils.isBlank(
(String) payload.get(AndroidConstants.PlatformConfigs.KioskConfigs.ADMIN_COMPONENT_NAME))) {
invalidPlatformConfigs += AndroidConstants.PlatformConfigs.KioskConfigs.ADMIN_COMPONENT_NAME + ", ";
isInvalidConfig = true;
}
if (StringUtils.isBlank((String) payload.get(AndroidConstants.PlatformConfigs.KioskConfigs.WIFI_SSID))) {
invalidPlatformConfigs += AndroidConstants.PlatformConfigs.KioskConfigs.WIFI_SSID + ", ";
isInvalidConfig = true;
}
if (StringUtils
.isBlank((String) payload.get(AndroidConstants.PlatformConfigs.KioskConfigs.WIFI_PASSWORD))) {
invalidPlatformConfigs += AndroidConstants.PlatformConfigs.KioskConfigs.WIFI_PASSWORD + ", ";
isInvalidConfig = true;
}
if (StringUtils
.isBlank((String) payload.get(AndroidConstants.PlatformConfigs.KioskConfigs.WIFI_SECURITY))) {
invalidPlatformConfigs += AndroidConstants.PlatformConfigs.KioskConfigs.WIFI_SECURITY + ", ";
isInvalidConfig = true;
}
if (StringUtils.isBlank((String) payload.get(AndroidConstants.PlatformConfigs.KioskConfigs.CHECKSUM))) {
invalidPlatformConfigs += AndroidConstants.PlatformConfigs.KioskConfigs.CHECKSUM + ", ";
isInvalidConfig = true;
}
if (StringUtils.isBlank((String) payload.get(AndroidConstants.PlatformConfigs.KioskConfigs.DOWNLOAD_URL))) {
invalidPlatformConfigs += AndroidConstants.PlatformConfigs.KioskConfigs.DOWNLOAD_URL + ", ";
isInvalidConfig = true;
}
if (StringUtils
.isBlank((String) payload.get(AndroidConstants.PlatformConfigs.KioskConfigs.SKIP_ENCRYPTION))) {
invalidPlatformConfigs += AndroidConstants.PlatformConfigs.KioskConfigs.SKIP_ENCRYPTION + ", ";
isInvalidConfig = true;
}
}
if (isInvalidConfig) {
String msg = "Android Platform Configuration is not configured properly. Platform configs [ "
+ invalidPlatformConfigs + " ]";
log.error(msg);
throw new InvalidConfigurationException(msg);
}
}
}

@ -18,6 +18,7 @@
package org.wso2.carbon.device.mgt.mobile.android.core.internal;
import org.wso2.carbon.device.mgt.common.spi.DeviceTypeCommonService;
import org.wso2.carbon.device.mgt.mobile.android.common.spi.AndroidGoogleEnterpriseService;
import org.wso2.carbon.device.mgt.mobile.android.common.spi.AndroidService;
import org.wso2.carbon.registry.core.service.RegistryService;
@ -31,6 +32,8 @@ public class AndroidDeviceManagementDataHolder {
private AndroidGoogleEnterpriseService androidDeviceManagementService;
private AndroidService androidService;
private DeviceTypeCommonService deviceTypeCommonService;
private static AndroidDeviceManagementDataHolder thisInstance = new AndroidDeviceManagementDataHolder();
private AndroidDeviceManagementDataHolder() {
@ -64,4 +67,12 @@ public class AndroidDeviceManagementDataHolder {
public void setAndroidService(AndroidService androidService) {
this.androidService = androidService;
}
public DeviceTypeCommonService getDeviceTypeCommonService() {
return deviceTypeCommonService;
}
public void setDeviceTypeCommonService(DeviceTypeCommonService deviceTypeCommonService) {
this.deviceTypeCommonService = deviceTypeCommonService;
}
}

@ -22,11 +22,13 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.osgi.framework.BundleContext;
import org.osgi.service.component.ComponentContext;
import org.wso2.carbon.device.mgt.common.spi.DeviceTypeCommonService;
import org.wso2.carbon.device.mgt.mobile.android.common.spi.AndroidGoogleEnterpriseService;
import org.wso2.carbon.device.mgt.mobile.android.common.spi.AndroidService;
import org.wso2.carbon.device.mgt.mobile.android.core.dao.AbstractMobileDeviceManagementDAOFactory;
import org.wso2.carbon.device.mgt.mobile.android.core.impl.AndroidGoogleEnterpriseServiceImpl;
import org.wso2.carbon.device.mgt.mobile.android.core.impl.AndroidServiceImpl;
import org.wso2.carbon.device.mgt.mobile.android.core.impl.DeviceTypeCommonServiceImpl;
import org.wso2.carbon.device.mgt.mobile.android.core.util.MobileDeviceManagementUtil;
import org.wso2.carbon.ndatasource.core.DataSourceService;
import org.wso2.carbon.registry.core.service.RegistryService;
@ -69,6 +71,11 @@ public class AndroidPluginServiceComponent {
androidService);
bundleContext.registerService(AndroidService.class.getName(), androidService, null);
DeviceTypeCommonService deviceTypeCommonService = new DeviceTypeCommonServiceImpl();
AndroidDeviceManagementDataHolder.getInstance().setDeviceTypeCommonService(
deviceTypeCommonService);
bundleContext.registerService(DeviceTypeCommonService.class.getName(), deviceTypeCommonService, null);
AndroidGoogleEnterpriseService androidPluginService = new AndroidGoogleEnterpriseServiceImpl();
AndroidDeviceManagementDataHolder.getInstance().setAndroidDeviceManagementService(
androidPluginService);

@ -30,6 +30,7 @@ import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagement
import org.wso2.carbon.device.mgt.common.operation.mgt.Activity;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
import org.wso2.carbon.device.mgt.common.spi.DeviceTypeCommonService;
import org.wso2.carbon.device.mgt.core.app.mgt.ApplicationManagementProviderService;
import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceInformationManager;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
@ -101,6 +102,18 @@ public class AndroidAPIUtils {
return deviceManagementProviderService;
}
public static DeviceTypeCommonService getDeviceTypeCommonService() {
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
DeviceTypeCommonService deviceTypeCommonService = (DeviceTypeCommonService) ctx
.getOSGiService(DeviceTypeCommonService.class, null);
if (deviceTypeCommonService == null) {
String msg = "Device Type Common service has not initialized.";
log.error(msg);
throw new IllegalStateException(msg);
}
return deviceTypeCommonService;
}
public static DeviceInformationManager getDeviceInformationManagerService() {
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
DeviceInformationManager informationManager =

Loading…
Cancel
Save