From eb8dad1af7509a8927b04474b25992ba37acbd4e Mon Sep 17 00:00:00 2001 From: Hasunie Date: Fri, 29 Sep 2017 11:33:54 +0530 Subject: [PATCH] resolved wso2/product-iots#1428 --- .../windows/api/common/PluginConstants.java | 2 + .../windows/api/operations/ChallengeTag.java | 3 +- .../windows/api/operations/StatusTag.java | 12 ++++ .../api/operations/util/Constants.java | 1 + .../api/operations/util/OperationHandler.java | 51 ++++++++++++++-- .../api/operations/util/OperationReply.java | 16 ++++- .../impl/EnrollmentServiceImpl.java | 21 ++++++- .../impl/DeviceManagementServiceImpl.java | 58 +++++++++++++------ .../services/syncml/beans/WindowsDevice.java | 9 +++ .../main/resources/win10-wap-provisioning.xml | 6 +- .../mobile/windows/impl/dto/MobileDevice.java | 1 + 11 files changed, 149 insertions(+), 31 deletions(-) diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/PluginConstants.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/PluginConstants.java index 7ef3f6498d..e82d550576 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/PluginConstants.java +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/PluginConstants.java @@ -207,6 +207,7 @@ public final class PluginConstants { public static final String MANUFACTURER = "MANUFACTURER"; public static final String LANGUAGE = "LANGUAGE"; public static final String RESOLUTION = "RESOLUTION"; + public static final String WINDOWS_TYPE = "WINDOWS_TYPE"; // windows 10 codes public static final String TOTAL_RAM = "TOTAL_RAM";// available ram in MB @@ -357,6 +358,7 @@ public final class PluginConstants { public static final String DEVICE_VERSION = "OSVersion"; public static final String DEVICE_ID = "DeviceID"; public static final String IMEI = "MobileEquipmentId"; + public static final String TYPE = "DeviceType"; } } diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ChallengeTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ChallengeTag.java index e2c1fe6b4e..341f819ae9 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ChallengeTag.java +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ChallengeTag.java @@ -38,9 +38,10 @@ public class ChallengeTag { public void buildChallengeElement(Document doc, Element rootElement) { Element challenge = doc.createElement(Constants.CHALLENGE); - rootElement.appendChild(challenge); + if (getMeta() != null) { getMeta().buildMetaElement(doc, challenge); } + rootElement.appendChild(challenge); } } diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/StatusTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/StatusTag.java index b83fe5c04c..157ff3411a 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/StatusTag.java +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/StatusTag.java @@ -43,6 +43,16 @@ public class StatusTag { this.targetReference = targetReference; this.data = data; } + public StatusTag(int commandId, int messageReference, int commandReference, String command, + ChallengeTag challengeTag, String targetReference, String data) { + this.commandId = commandId; + this.messageReference = messageReference; + this.commandReference = commandReference; + this.command = command; + this.challenge = challengeTag; + this.targetReference = targetReference; + this.data = data; + } public StatusTag() { } @@ -132,8 +142,10 @@ public class StatusTag { status.appendChild(targetReference); } if (getChallenge() != null) { + getChallenge().buildChallengeElement(doc, status); } + if (getData() != null) { Element data = doc.createElement(Constants.DATA); data.appendChild(doc.createTextNode(getData())); diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/Constants.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/Constants.java index b20f31baa6..b0d3fb85d6 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/Constants.java +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/Constants.java @@ -87,6 +87,7 @@ public class Constants { public final class SyncMLResponseCodes { public static final String AUTHENTICATION_ACCEPTED = "212"; public static final String ACCEPTED = "200"; + public static final String UNAUTHORIZED = "401"; public static final String ACCEPTED_FOR_PROCESSING = "202"; public static final String PIN_NOTFOUND = "405"; public static final String LOCK_RESET_NOTIFICATION = "Error occurred in Device Lock Operation. " + diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationHandler.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationHandler.java index 25f963ab38..6c7c48f7f8 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationHandler.java +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationHandler.java @@ -22,7 +22,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.json.JSONException; import org.json.JSONObject; -import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo; @@ -32,15 +31,21 @@ import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagement import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementService; 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.policy.mgt.ProfileFeature; +import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.ComplianceFeature; +import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.PolicyComplianceException; import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceDetailsMgtException; import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils; +import org.wso2.carbon.device.mgt.mobile.windows.api.operations.StatusTag; +import org.wso2.carbon.device.mgt.mobile.windows.api.operations.SyncmlDocument; +import org.wso2.carbon.device.mgt.mobile.windows.api.operations.SyncmlHeader; +import org.wso2.carbon.device.mgt.mobile.windows.api.operations.ItemTag; +import org.wso2.carbon.device.mgt.mobile.windows.api.operations.WindowsOperationException; +import org.wso2.carbon.device.mgt.mobile.windows.api.operations.ResultsTag; +import org.wso2.carbon.device.mgt.mobile.windows.api.operations.SyncmlBody; import org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.beans.Profile; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.*; import org.wso2.carbon.policy.mgt.common.PolicyManagementException; -import org.wso2.carbon.device.mgt.common.policy.mgt.ProfileFeature; -import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.ComplianceFeature; -import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.PolicyComplianceException; import java.util.ArrayList; import java.util.List; @@ -226,6 +231,22 @@ public class OperationHandler { } } + public void updateDisenrollOperation(DeviceIdentifier deviceIdentifier) throws OperationManagementException { + List pendingDeviceInfoOperations; + try { + pendingDeviceInfoOperations = WindowsAPIUtils.getPendingOperations(deviceIdentifier); + } catch (DeviceManagementException e) { + throw new OperationManagementException("Error occurred while getting pending operations."); + } + for (Operation operation : pendingDeviceInfoOperations) { + if (PluginConstants.OperationCodes.DISENROLL.equals(operation.getCode())) { + operation.setStatus(Operation.Status.COMPLETED); + updateStatus(deviceIdentifier.getId(), pendingDeviceInfoOperations); + } + } + + } + public void updateDeviceInfoStatus(DeviceIdentifier deviceIdentifier) throws OperationManagementException { List pendingDeviceInfoOperations; @@ -294,6 +315,9 @@ public class OperationHandler { if (OperationCode.Command.TOTAL_RAM.getCode().equals(itemTag.getSource().getLocURI())) { updateDeviceInfo(syncmlDocument); } + if (OperationCode.Command.BATTERY_CHARGE_REMAINING.equals(itemTag.getSource().getLocURI())) { + updateDeviceInfo(syncmlDocument); + } } } UpdateUriOperations(syncmlDocument); @@ -562,6 +586,7 @@ public class OperationHandler { String totalRAM; String deviceID = null; String totalStorage; + Double battery; List deviceInformations = syncmlDocument.getBody().getResults().getItem(); DeviceInfo deviceInfo = new DeviceInfo(); @@ -598,6 +623,10 @@ public class OperationHandler { if (OperationCode.Info.DEV_ID.getCode().equals(source)) { deviceID = item.getData(); } + if (OperationCode.Info.BATTERY_CHARGE_REMAINING.getCode().equals(source)) { + battery = Double.valueOf(item.getData()); + deviceInfo.setBatteryLevel(battery); + } } DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject(deviceID); try { @@ -636,6 +665,18 @@ public class OperationHandler { } catch (OperationManagementException e) { throw new WindowsOperationException("Error occurred while updating Device Location operation status."); } + } + + public void checkForDeviceWipe(List pendingDeviceInfoOperations + , DeviceIdentifier deviceIdentifier) throws OperationManagementException { + + for (Operation operation : pendingDeviceInfoOperations) { + if (PluginConstants.OperationCodes.WIPE_DATA.equals(operation.getCode())) { + operation.setStatus(Operation.Status.COMPLETED); + updateStatus(deviceIdentifier.getId(), pendingDeviceInfoOperations); + } + } } } + diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationReply.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationReply.java index 9fbb4f27d3..ae2a768b76 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationReply.java +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationReply.java @@ -21,6 +21,8 @@ package org.wso2.carbon.device.mgt.mobile.windows.api.operations.util; import com.google.gson.Gson; import org.json.JSONException; import org.json.JSONObject; +import org.w3c.dom.Document; +import org.w3c.dom.Element; import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; @@ -159,17 +161,25 @@ public class OperationReply { } private SyncmlBody generateStatuses() { + SyncmlBody sourceSyncmlBody = syncmlDocument.getBody(); SyncmlHeader sourceHeader = syncmlDocument.getHeader(); StatusTag headerStatus; + ChallengeTag challengeTag; + challengeTag = new ChallengeTag(); + MetaTag metaTag = new MetaTag(); + metaTag.setFormat("b64"); + metaTag.setType("syncml:auth-md5"); + metaTag.setNextNonce("ZHVtbXk="); + challengeTag.setMeta(metaTag); SyncmlBody syncmlBodyReply = new SyncmlBody(); List statuses = new ArrayList<>(); List sourceStatuses = sourceSyncmlBody.getStatus(); if (sourceStatuses.isEmpty()) { headerStatus = new StatusTag(headerCommandId, sourceHeader.getMsgID(), HEADER_STATUS_ID, - HEADER_COMMAND_TEXT, sourceHeader.getSource().getLocURI(), - String.valueOf(Constants.SyncMLResponseCodes.AUTHENTICATION_ACCEPTED)); + HEADER_COMMAND_TEXT, challengeTag,sourceHeader.getSource().getLocURI(), + String.valueOf(Constants.SyncMLResponseCodes.UNAUTHORIZED)); statuses.add(headerStatus); } else { for (StatusTag sourceStatus : sourceStatuses) { @@ -177,7 +187,7 @@ public class OperationReply { headerStatus = new StatusTag(headerCommandId, sourceHeader.getMsgID(), HEADER_STATUS_ID, - HEADER_COMMAND_TEXT, sourceHeader.getSource().getLocURI(), + HEADER_COMMAND_TEXT, challengeTag, sourceHeader.getSource().getLocURI(), String.valueOf(Constants.SyncMLResponseCodes.AUTHENTICATION_ACCEPTED)); statuses.add(headerStatus); } diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/impl/EnrollmentServiceImpl.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/impl/EnrollmentServiceImpl.java index ee3d62c9ca..814a7d0ef0 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/impl/EnrollmentServiceImpl.java +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/impl/EnrollmentServiceImpl.java @@ -18,6 +18,7 @@ package org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.impl; +import com.google.gson.Gson; import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.logging.Log; @@ -40,6 +41,7 @@ import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WAPProvis import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.DeviceUtil; import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils; +import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.DeviceInfo; import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.SyncmlCredentialUtil; import org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.EnrollmentService; import org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.beans.*; @@ -368,7 +370,7 @@ public class EnrollmentServiceImpl implements EnrollmentService { * @return Value added Device. */ private Device generateDevice(WindowsDevice windowsDevice) { - + Gson gson = new Gson(); Device generatedDevice = new Device(); Device.Property OSVersionProperty = new Device.Property(); @@ -383,15 +385,28 @@ public class EnrollmentServiceImpl implements EnrollmentService { IMEIProperty.setName(PluginConstants.SyncML.IMEI); IMEIProperty.setValue(windowsDevice.getImei()); + Device.Property deviceInfoProperties = new Device.Property(); + deviceInfoProperties.setName(PluginConstants.WindowsEnrollmentProperties.TYPE); + deviceInfoProperties.setValue(windowsDevice.getWindowsType()); + String deviceInfo = gson.toJson(deviceInfoProperties); + + + Device.Property winDeviceType = new Device.Property(); + winDeviceType.setName(PluginConstants.SyncML.DEVICE_INFO); + winDeviceType.setValue(deviceInfo); + + List propertyList = new ArrayList<>(); propertyList.add(OSVersionProperty); propertyList.add(IMSEIProperty); propertyList.add(IMEIProperty); + propertyList.add(winDeviceType); EnrolmentInfo enrolmentInfo = new EnrolmentInfo(); enrolmentInfo.setOwner(windowsDevice.getUser()); enrolmentInfo.setOwnership(EnrolmentInfo.OwnerShip.BYOD); enrolmentInfo.setStatus(EnrolmentInfo.Status.ACTIVE); + generatedDevice.setEnrolmentInfo(enrolmentInfo); generatedDevice.setDeviceIdentifier(windowsDevice.getDeviceId()); @@ -430,9 +445,13 @@ public class EnrollmentServiceImpl implements EnrollmentService { if (PluginConstants.WindowsEnrollmentProperties.DEVICE_VERSION.equals(contextItem.getName())) { windowsDevice.setOsVersion(contextItem.getValue()); } + if (PluginConstants.WindowsEnrollmentProperties.TYPE.equals(contextItem.getName())) { + windowsDevice.setWindowsType(contextItem.getValue()); + } } Device device = generateDevice(windowsDevice); WindowsAPIUtils.getDeviceManagementService().enrollDevice(device); + PolicyManagerService policyManagerService = WindowsAPIUtils.getPolicyManagerService(); policyManagerService.getEffectivePolicy(new DeviceIdentifier(windowsDevice.getDeviceId(), device.getType())); diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/impl/DeviceManagementServiceImpl.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/impl/DeviceManagementServiceImpl.java index 8dd5f93cb6..cfccd5e13d 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/impl/DeviceManagementServiceImpl.java +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/impl/DeviceManagementServiceImpl.java @@ -87,39 +87,60 @@ public class DeviceManagementServiceImpl implements DeviceManagementService { if ((PluginConstants.SyncML.SYNCML_FIRST_MESSAGE_ID == msgId) && (PluginConstants.SyncML.SYNCML_FIRST_SESSION_ID == sessionId)) { - token = syncmlHeader.getCredential().getData(); - MobileCacheEntry cacheToken = DeviceUtil.getTokenEntry(token); - DeviceUtil.persistChallengeToken(token, deviceIdentifier.getId(), user); - PrivilegedCarbonContext carbonCtx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - carbonCtx.setTenantId(cacheToken.getTenanatID(), true); + if (syncmlHeader.getCredential() != null) { + token = syncmlHeader.getCredential().getData(); - if ((cacheToken.getUsername() != null) && (cacheToken.getUsername().equals(user))) { + MobileCacheEntry cacheToken = DeviceUtil.getTokenEntry(token); + DeviceUtil.persistChallengeToken(token, deviceIdentifier.getId(), user); + PrivilegedCarbonContext carbonCtx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + carbonCtx.setTenantId(cacheToken.getTenanatID(), true); - if (modifyEnrollWithMoreDetail(request, cacheToken.getTenantDomain(), cacheToken.getTenanatID())) { - pendingOperations = operationHandler.getPendingOperations(syncmlDocument); - response = operationReply.generateReply(syncmlDocument, pendingOperations); - return Response.status(Response.Status.OK).entity(response).build(); + if ((cacheToken.getUsername() != null) && (cacheToken.getUsername().equals(user))) { + + if (modifyEnrollWithMoreDetail(request, cacheToken.getTenantDomain(), cacheToken.getTenanatID())) { + pendingOperations = operationHandler.getPendingOperations(syncmlDocument); + operationHandler.checkForDeviceWipe(pendingOperations, deviceIdentifier); + response = operationReply.generateReply(syncmlDocument, pendingOperations); + return Response.status(Response.Status.OK).entity(response).build(); + + } else { + String msg = "Error occurred in while modify the enrollment."; + log.error(msg); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } } else { - String msg = "Error occurred in while modify the enrollment."; + String msg = "Authentication failure due to incorrect credentials."; log.error(msg); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + return Response.status(Response.Status.UNAUTHORIZED).entity(msg).build(); } + } else { - String msg = "Authentication failure due to incorrect credentials."; - log.error(msg); - return Response.status(Response.Status.UNAUTHORIZED).entity(msg).build(); + return Response.ok().entity(operationReply.generateReply(syncmlDocument, null)).build(); } } else { - MobileCacheEntry cacheToken = DeviceUtil.getTokenEntryFromDeviceId(deviceIdentifier.getId()); - PrivilegedCarbonContext carbonCtx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - carbonCtx.setTenantId(cacheToken.getTenanatID()); + if (DeviceUtil.getTokenEntryFromDeviceId(deviceIdentifier.getId()) == null) { + if (syncmlHeader.getCredential() != null) { + token = syncmlHeader.getCredential().getData(); + + MobileCacheEntry cacheToken = DeviceUtil.getTokenEntry(token); + DeviceUtil.persistChallengeToken(token, deviceIdentifier.getId(), user); + PrivilegedCarbonContext carbonCtx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + carbonCtx.setTenantId(cacheToken.getTenanatID(), true); + } + } else { + MobileCacheEntry cacheToken = DeviceUtil.getTokenEntryFromDeviceId(deviceIdentifier.getId()); + PrivilegedCarbonContext carbonCtx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + carbonCtx.setTenantId(cacheToken.getTenanatID()); + } if ((syncmlDocument.getBody().getAlert() != null)) { if (!syncmlDocument.getBody().getAlert().getData().equals(Constants.DISENROLL_ALERT_DATA)) { pendingOperations = operationHandler.getPendingOperations(syncmlDocument); + operationHandler.checkForDeviceWipe(pendingOperations, deviceIdentifier); return Response.ok().entity(operationReply.generateReply( syncmlDocument, pendingOperations)).build(); } else { if (WindowsAPIUtils.getDeviceManagementService().getDevice(deviceIdentifier, false) != null) { + operationHandler.updateDisenrollOperation(deviceIdentifier); WindowsAPIUtils.getDeviceManagementService().disenrollDevice(deviceIdentifier); return Response.ok().entity(operationReply.generateReply(syncmlDocument, null)).build(); } else { @@ -130,6 +151,7 @@ public class DeviceManagementServiceImpl implements DeviceManagementService { } } else { pendingOperations = operationHandler.getPendingOperations(syncmlDocument); + operationHandler.checkForDeviceWipe(pendingOperations, deviceIdentifier); return Response.ok().entity(operationReply.generateReply( syncmlDocument, pendingOperations)).build(); } diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/WindowsDevice.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/WindowsDevice.java index 272b7875ab..4bafbf22c5 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/WindowsDevice.java +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/WindowsDevice.java @@ -32,6 +32,15 @@ public class WindowsDevice { private String model; private String user; private String deviceName; + private String windowsType; + + public String getWindowsType() { + return windowsType; + } + + public void setWindowsType(String windowsType) { + this.windowsType = windowsType; + } public String getImei() { return imei; diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/resources/win10-wap-provisioning.xml b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/resources/win10-wap-provisioning.xml index 5d305a243d..fdbd899384 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/resources/win10-wap-provisioning.xml +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/resources/win10-wap-provisioning.xml @@ -29,7 +29,7 @@ - + @@ -42,8 +42,8 @@ - - + + diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dto/MobileDevice.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dto/MobileDevice.java index 77b70de3b1..7618ab85fd 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dto/MobileDevice.java +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dto/MobileDevice.java @@ -39,6 +39,7 @@ public class MobileDevice implements Serializable { private String serial; private String osBuildDate; + private Map deviceProperties; public MobileDevice() {