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..897a7d2bba 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 @@ -352,11 +352,10 @@ public final class PluginConstants { private WindowsEnrollmentProperties() { throw new AssertionError(); } - public static final String DEVICE_NAME = "DeviceName"; 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..c47649ce27 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,9 @@ 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..4c82b8a561 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 @@ -44,6 +44,17 @@ public class StatusTag { 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() { } @@ -140,5 +151,4 @@ public class StatusTag { status.appendChild(data); } } - } 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..fd5cf76eb0 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,20 @@ public class OperationHandler { } } + public void updateDisenrollOperationStatus(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 +313,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 +584,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 +621,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 +663,16 @@ 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..389dd0cdcf 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; @@ -162,22 +164,27 @@ public class OperationReply { SyncmlBody sourceSyncmlBody = syncmlDocument.getBody(); SyncmlHeader sourceHeader = syncmlDocument.getHeader(); StatusTag headerStatus; + ChallengeTag challengeTag = new ChallengeTag(); + MetaTag metaTag = new MetaTag(); + metaTag.setFormat(Constants.CRED_FORMAT); + metaTag.setType(Constants.CRED_TYPE); + metaTag.setNextNonce(Constants.INITIAL_NONCE); + 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) { if (sourceStatus.getChallenge() != null && HEADER_COMMAND_TEXT.equals(sourceStatus.getCommand())) { - 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); } @@ -230,7 +237,6 @@ public class OperationReply { private void appendOperations(SyncmlBody syncmlBody) throws PolicyManagementException, FeatureManagementException, JSONException, SyncmlOperationException { - GetTag getElement = new GetTag(); List getElements = new ArrayList<>(); List executeElements = new ArrayList<>(); 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..558cd601be 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.*; @@ -98,7 +100,6 @@ public class EnrollmentServiceImpl implements EnrollmentService { AdditionalContext additionalContext, Holder response) throws WindowsDeviceEnrolmentException, UnsupportedEncodingException, WAPProvisioningException { - String headerBinarySecurityToken = null; String headerTo = null; String encodedWap; @@ -199,7 +200,6 @@ public class EnrollmentServiceImpl implements EnrollmentService { TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(DOMSource, streamResult); - return stringWriter.toString(); } @@ -220,14 +220,12 @@ public class EnrollmentServiceImpl implements EnrollmentService { String signedCertEncodedString; X509Certificate signedCertificate; String provisioningXmlString; - CertificateManagementServiceImpl certMgtServiceImpl = CertificateManagementServiceImpl.getInstance(); Base64 base64Encoder = new Base64(); try { X509Certificate rootCACertificate = (X509Certificate) certMgtServiceImpl.getCACertificate(); rootCertEncodedString = base64Encoder.encodeAsString(rootCACertificate.getEncoded()); - signedCertificate = certMgtServiceImpl.getSignedCertificateFromCSR(binarySecurityToken); signedCertEncodedString = base64Encoder.encodeAsString(signedCertificate.getEncoded()); @@ -312,7 +310,6 @@ public class EnrollmentServiceImpl implements EnrollmentService { Node pollValue = pollingAttributes.getNamedItem(PluginConstants.CertificateEnrolment.VALUE); pollValue.setTextContent(pollingFrequency); provisioningXmlString = convertDocumentToString(document); - } catch (ParserConfigurationException e) { throw new WAPProvisioningException("Problem occurred while creating configuration request", e); } catch (CertificateEncodingException e) { @@ -368,7 +365,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,16 +380,26 @@ 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()); generatedDevice.setProperties(propertyList); @@ -430,6 +437,9 @@ 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); 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..5b8d52a44b 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,54 @@ 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 ((cacheToken.getUsername() != null) && (cacheToken.getUsername().equals(user))) { - - 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 (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); + 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.updateDisenrollOperationStatus(deviceIdentifier); WindowsAPIUtils.getDeviceManagementService().disenrollDevice(deviceIdentifier); return Response.ok().entity(operationReply.generateReply(syncmlDocument, null)).build(); } else { @@ -130,6 +145,7 @@ public class DeviceManagementServiceImpl implements DeviceManagementService { } } else { pendingOperations = operationHandler.getPendingOperations(syncmlDocument); + operationHandler.checkForDeviceWipe(pendingOperations, deviceIdentifier); return Response.ok().entity(operationReply.generateReply( syncmlDocument, pendingOperations)).build(); } @@ -171,7 +187,6 @@ public class DeviceManagementServiceImpl implements DeviceManagementService { boolean status = false; String user; SyncmlDocument syncmlDocument; - try { syncmlDocument = SyncmlParser.parseSyncmlPayload(request); ReplaceTag replace = syncmlDocument.getBody().getReplace(); @@ -196,7 +211,7 @@ public class DeviceManagementServiceImpl implements DeviceManagementService { Device existingDevice = WindowsAPIUtils.getDeviceManagementService().getDevice(deviceIdentifier); if (!existingDevice.getProperties().isEmpty()) { List existingProperties = new ArrayList<>(); - + Device.Property vendorProperty = new Device.Property(); vendorProperty.setName(PluginConstants.SyncML.VENDOR); vendorProperty.setValue(devMan); 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 @@ - - + +