fixing windows10 enrollment endpoiny issues

revert-dabc3590
Hasunie 8 years ago
parent 965f396757
commit 0ffb142023

@ -81,6 +81,10 @@ public class HeartBeatDeviceInfo {
availableStorage.setCode(PluginConstants.SyncML.TOTAL_STORAGE); availableStorage.setCode(PluginConstants.SyncML.TOTAL_STORAGE);
deviceInfoOperations.add(availableStorage); deviceInfoOperations.add(availableStorage);
Operation remainingBattery = new Operation();
remainingBattery.setCode(PluginConstants.SyncML.BATTERY_CHARGE_REMAINING);
deviceInfoOperations.add(remainingBattery);
return deviceInfoOperations; return deviceInfoOperations;
} }
} }

@ -1,3 +1,21 @@
/*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* you may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.impl; package org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.impl;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
@ -12,13 +30,10 @@ import org.w3c.dom.*;
import org.wso2.carbon.certificate.mgt.core.exception.KeystoreException; import org.wso2.carbon.certificate.mgt.core.exception.KeystoreException;
import org.wso2.carbon.certificate.mgt.core.service.CertificateManagementServiceImpl; import org.wso2.carbon.certificate.mgt.core.service.CertificateManagementServiceImpl;
import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.common.DeviceManagementConstants; import org.wso2.carbon.device.mgt.common.*;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry; import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry;
import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants;
import org.wso2.carbon.device.mgt.mobile.windows.api.common.beans.CacheEntry; import org.wso2.carbon.device.mgt.mobile.windows.api.common.beans.CacheEntry;
import org.wso2.carbon.device.mgt.mobile.windows.api.common.beans.Device;
import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.CertificateGenerationException; import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.CertificateGenerationException;
import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.SyncmlMessageFormatException; import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.SyncmlMessageFormatException;
import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WAPProvisioningException; import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WAPProvisioningException;
@ -29,6 +44,8 @@ import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.SyncmlCrede
import org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.EnrollmentService; import org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.EnrollmentService;
import org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.beans.*; import org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.beans.*;
import org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.beans.WindowsDevice; import org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.beans.WindowsDevice;
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -59,8 +76,7 @@ import java.util.List;
/** /**
* Implementation class of CertificateEnrollmentService interface. This class implements MS-WSTEP * Implementation class of Windows10 Enrollment process.
* protocol.
*/ */
@WebService(endpointInterface = PluginConstants.ENROLLMENT_SERVICE_ENDPOINT, @WebService(endpointInterface = PluginConstants.ENROLLMENT_SERVICE_ENDPOINT,
targetNamespace = PluginConstants.DEVICE_ENROLLMENT_SERVICE_TARGET_NAMESPACE) targetNamespace = PluginConstants.DEVICE_ENROLLMENT_SERVICE_TARGET_NAMESPACE)
@ -86,7 +102,6 @@ public class EnrollmentServiceImpl implements EnrollmentService {
String headerTo = null; String headerTo = null;
String encodedWap; String encodedWap;
List<Header> headers = getHeaders(); List<Header> headers = getHeaders();
WindowsDevice windowsDevice = new WindowsDevice();
for (Header headerElement : headers != null ? headers : null) { for (Header headerElement : headers != null ? headers : null) {
String nodeName = headerElement.getName().getLocalPart(); String nodeName = headerElement.getName().getLocalPart();
if (PluginConstants.SECURITY.equals(nodeName)) { if (PluginConstants.SECURITY.equals(nodeName)) {
@ -98,32 +113,13 @@ public class EnrollmentServiceImpl implements EnrollmentService {
headerTo = toElement.getFirstChild().getTextContent(); headerTo = toElement.getFirstChild().getTextContent();
} }
} }
windowsDevice.setDeviceType(DeviceManagementConstants.MobileDeviceTypes.
MOBILE_DEVICE_TYPE_WINDOWS);
windowsDevice.setUser(getRequestedUser(headerBinarySecurityToken));
List<ContextItem> contextItems = additionalContext.getcontextitem();
for (int x= 0; x< contextItems.size(); x++) {
switch (x) {
case PluginConstants.WindowsEnrollmentProperties.WIN_DEVICE_NAME:
windowsDevice.setDeviceName(contextItems.get(x).getValue());
case PluginConstants.WindowsEnrollmentProperties.WIN_DEVICE_IMEI:
windowsDevice.setImei(contextItems.get(x).getValue());
case PluginConstants.WindowsEnrollmentProperties.WIN_DEVICE_ID:
windowsDevice.setDeviceId(contextItems.get(x).getValue());
case PluginConstants.WindowsEnrollmentProperties.WIN_DEVICE_VERSION:
windowsDevice.setOsVersion(contextItems.get(x).getValue());
}
}
/////////
org.wso2.carbon.device.mgt.common.Device device = generateDevice(windowsDevice);
try { try {
WindowsAPIUtils.getDeviceManagementService().enrollDevice(device); enrollDevice(additionalContext, headerBinarySecurityToken);
} catch (DeviceManagementException e) { } catch (DeviceManagementException e) {
e.printStackTrace(); throw new WindowsDeviceEnrolmentException("Error occurred while enrolling the device.");
} catch (PolicyManagementException e) {
throw new WindowsDeviceEnrolmentException("Error occurred while enforcing windows policies.");
} }
/////////
String[] splitEmail = headerTo.split("(/ENROLLMENTSERVER)"); String[] splitEmail = headerTo.split("(/ENROLLMENTSERVER)");
String email = splitEmail[PluginConstants.CertificateEnrolment.EMAIL_SEGMENT]; String email = splitEmail[PluginConstants.CertificateEnrolment.EMAIL_SEGMENT];
@ -187,6 +183,7 @@ public class EnrollmentServiceImpl implements EnrollmentService {
} }
} }
/** /**
* Method used to Convert the Document object into a String. * Method used to Convert the Document object into a String.
* *
@ -296,7 +293,7 @@ public class EnrollmentServiceImpl implements EnrollmentService {
Node authNameNode = appServerAttribute.getNamedItem(PluginConstants.CertificateEnrolment.VALUE); Node authNameNode = appServerAttribute.getNamedItem(PluginConstants.CertificateEnrolment.VALUE);
String userName = getRequestedUser(headerBst); String userName = getRequestedUser(headerBst);
//CacheEntry cacheEntry = (CacheEntry) DeviceUtil.getCacheEntry(headerBst); //CacheEntry cacheEntry = (CacheEntry) DeviceUtil.getCacheEntry(headerBst);
// String userName = cacheEntry.getUsername(); // String userName = cacheEntry.getUsername();
authNameNode.setTextContent(userName); authNameNode.setTextContent(userName);
DeviceUtil.removeToken(headerBst); DeviceUtil.removeToken(headerBst);
String password = DeviceUtil.generateRandomToken(); String password = DeviceUtil.generateRandomToken();
@ -346,29 +343,41 @@ public class EnrollmentServiceImpl implements EnrollmentService {
return CastUtils.cast((List<?>) message.get(Header.HEADER_LIST)); return CastUtils.cast((List<?>) message.get(Header.HEADER_LIST));
} }
/**
* This method to getting RSTR requested user from the Cache.
*
* @param bst Binary Security token which has given from BST Endpoint.
* @return User for given token.
*/
private String getRequestedUser(String bst) { private String getRequestedUser(String bst) {
CacheEntry cacheEntry = (CacheEntry) DeviceUtil.getCacheEntry(bst); CacheEntry cacheEntry = (CacheEntry) DeviceUtil.getCacheEntry(bst);
String userName = cacheEntry.getUsername(); String userName = cacheEntry.getUsername();
return userName; return userName;
} }
private org.wso2.carbon.device.mgt.common.Device generateDevice(WindowsDevice windowsDevice) { /**
* This Method to generate windows device.
*
* @param windowsDevice Requested Device with properties.
* @return Value added Device.
*/
private Device generateDevice(WindowsDevice windowsDevice) {
org.wso2.carbon.device.mgt.common.Device generatedDevice = new org.wso2.carbon.device.mgt.common.Device(); Device generatedDevice = new Device();
org.wso2.carbon.device.mgt.common.Device.Property OSVersionProperty = new org.wso2.carbon.device.mgt.common.Device.Property(); Device.Property OSVersionProperty = new Device.Property();
OSVersionProperty.setName(PluginConstants.SyncML.OS_VERSION); OSVersionProperty.setName(PluginConstants.SyncML.OS_VERSION);
OSVersionProperty.setValue(windowsDevice.getOsVersion()); OSVersionProperty.setValue(windowsDevice.getOsVersion());
org.wso2.carbon.device.mgt.common.Device.Property IMSEIProperty = new org.wso2.carbon.device.mgt.common.Device.Property(); Device.Property IMSEIProperty = new Device.Property();
IMSEIProperty.setName(PluginConstants.SyncML.IMSI); IMSEIProperty.setName(PluginConstants.SyncML.IMSI);
IMSEIProperty.setValue(windowsDevice.getImsi()); IMSEIProperty.setValue(windowsDevice.getImsi());
org.wso2.carbon.device.mgt.common.Device.Property IMEIProperty = new org.wso2.carbon.device.mgt.common.Device.Property(); Device.Property IMEIProperty = new Device.Property();
IMEIProperty.setName(PluginConstants.SyncML.IMEI); IMEIProperty.setName(PluginConstants.SyncML.IMEI);
IMEIProperty.setValue(windowsDevice.getImei()); IMEIProperty.setValue(windowsDevice.getImei());
List<org.wso2.carbon.device.mgt.common.Device.Property> propertyList = new ArrayList<>(); List<Device.Property> propertyList = new ArrayList<>();
propertyList.add(OSVersionProperty); propertyList.add(OSVersionProperty);
propertyList.add(IMSEIProperty); propertyList.add(IMSEIProperty);
propertyList.add(IMEIProperty); propertyList.add(IMEIProperty);
@ -386,5 +395,39 @@ public class EnrollmentServiceImpl implements EnrollmentService {
return generatedDevice; return generatedDevice;
} }
/**
* This method to enroll windows10 Device.
*
* @param requestContextItems Context values to enroll the device.
* @param headerBinarySecurityToken SOAP request header value to identify the user.
* @throws DeviceManagementException Exception occurs while enrolling the Device.
* @throws PolicyManagementException Exception occurs while getting effective policies.
*/
private void enrollDevice(AdditionalContext requestContextItems, String headerBinarySecurityToken)
throws DeviceManagementException, PolicyManagementException {
WindowsDevice windowsDevice = new WindowsDevice();
windowsDevice.setDeviceType(DeviceManagementConstants.MobileDeviceTypes.
MOBILE_DEVICE_TYPE_WINDOWS);
windowsDevice.setUser(getRequestedUser(headerBinarySecurityToken));
List<ContextItem> contextItems = requestContextItems.getcontextitem();
for (int x = 0; x < contextItems.size(); x++) {
switch (x) {
case PluginConstants.WindowsEnrollmentProperties.WIN_DEVICE_NAME:
windowsDevice.setDeviceName(contextItems.get(x).getValue());
case PluginConstants.WindowsEnrollmentProperties.WIN_DEVICE_IMEI:
windowsDevice.setImei(contextItems.get(x).getValue());
case PluginConstants.WindowsEnrollmentProperties.WIN_DEVICE_ID:
windowsDevice.setDeviceId(contextItems.get(x).getValue());
case PluginConstants.WindowsEnrollmentProperties.WIN_DEVICE_VERSION:
windowsDevice.setOsVersion(contextItems.get(x).getValue());
}
}
Device device = generateDevice(windowsDevice);
WindowsAPIUtils.getDeviceManagementService().enrollDevice(device);
PolicyManagerService policyManagerService = WindowsAPIUtils.getPolicyManagerService();
policyManagerService.getEffectivePolicy(new DeviceIdentifier(windowsDevice.getDeviceId(), device.getType()));
}
} }

@ -46,7 +46,7 @@ import java.util.List;
*/ */
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Path("/operation/admin/devices") @Path("/admin/devices")
public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminService { public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminService {
private static Log log = LogFactory.getLog(OperationImpl.class); private static Log log = LogFactory.getLog(OperationImpl.class);
@ -103,7 +103,7 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
* @throws WindowsDeviceEnrolmentException * @throws WindowsDeviceEnrolmentException
*/ */
@POST @POST
@Path("/disenroll") @Path("/disenroll-devices")
public Response disenroll(@HeaderParam("Accept") String acceptHeader, List<String> deviceIDs) public Response disenroll(@HeaderParam("Accept") String acceptHeader, List<String> deviceIDs)
throws WindowsDeviceEnrolmentException { throws WindowsDeviceEnrolmentException {
@ -128,11 +128,11 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
log.error(errorMessage, e); log.error(errorMessage, e);
throw new WindowsOperationsException(message, responseMediaType); throw new WindowsOperationsException(message, responseMediaType);
} catch (InvalidDeviceException e) { } catch (InvalidDeviceException e) {
String errorMessage = "Invalid Device Identifiers found."; String errorMessage = "Invalid Device Identifiers found.";
log.error(errorMessage, e); log.error(errorMessage, e);
throw new BadRequestException( throw new BadRequestException(
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build()); new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build());
} }
} }
/** /**
@ -144,7 +144,7 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
* @throws WindowsDeviceEnrolmentException * @throws WindowsDeviceEnrolmentException
*/ */
@POST @POST
@Path("/wipe-data") @Path("/wipe-devices")
public Response wipe(@HeaderParam("Accept") String acceptHeader, List<String> deviceids) public Response wipe(@HeaderParam("Accept") String acceptHeader, List<String> deviceids)
throws WindowsDeviceEnrolmentException { throws WindowsDeviceEnrolmentException {
@ -187,7 +187,7 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
* @throws WindowsDeviceEnrolmentException * @throws WindowsDeviceEnrolmentException
*/ */
@POST @POST
@Path("/ring-device") @Path("/ring-devices")
public Response ring(@HeaderParam("Accept") String acceptHeader, List<String> deviceIDs) public Response ring(@HeaderParam("Accept") String acceptHeader, List<String> deviceIDs)
throws WindowsDeviceEnrolmentException { throws WindowsDeviceEnrolmentException {
@ -235,7 +235,7 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
* @throws WindowsDeviceEnrolmentException * @throws WindowsDeviceEnrolmentException
*/ */
@POST @POST
@Path("/lock-reset") @Path("/lock-reset-devices")
public Response lockReset(@HeaderParam("Accept") String acceptHeader, List<String> deviceIDs) public Response lockReset(@HeaderParam("Accept") String acceptHeader, List<String> deviceIDs)
throws WindowsDeviceEnrolmentException { throws WindowsDeviceEnrolmentException {

@ -67,10 +67,8 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
String token; String token;
String response; String response;
SyncmlDocument syncmlDocument; SyncmlDocument syncmlDocument;
List<Operation> deviceInfoOperations;
List<? extends Operation> pendingOperations; List<? extends Operation> pendingOperations;
OperationHandler operationHandler = new OperationHandler(); OperationHandler operationHandler = new OperationHandler();
DeviceInfo deviceInfo = new DeviceInfo();
OperationReply operationReply = new OperationReply(); OperationReply operationReply = new OperationReply();
try { try {
@ -91,11 +89,10 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
if (modifyEnrollWithMoreDetail(request)) { if (modifyEnrollWithMoreDetail(request)) {
pendingOperations = operationHandler.getPendingOperations(syncmlDocument); pendingOperations = operationHandler.getPendingOperations(syncmlDocument);
response = operationReply.generateReply(syncmlDocument,pendingOperations); response = operationReply.generateReply(syncmlDocument,pendingOperations);
return Response.status(Response.Status.OK).entity(response).build(); return Response.status(Response.Status.OK).entity(response).build();
} else { } else {
String msg = "Error occurred in device enrollment."; String msg = "Error occurred in while modify the enrollment.";
log.error(msg); log.error(msg);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
} }
@ -104,7 +101,7 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
log.error(msg); log.error(msg);
return Response.status(Response.Status.UNAUTHORIZED).entity(msg).build(); return Response.status(Response.Status.UNAUTHORIZED).entity(msg).build();
} }
} else if (sessionId >= PluginConstants.SyncML.SYNCML_SECOND_SESSION_ID) { } else {
if ((syncmlDocument.getBody().getAlert() != null)) { if ((syncmlDocument.getBody().getAlert() != null)) {
if (!syncmlDocument.getBody().getAlert().getData().equals(Constants.DISENROLL_ALERT_DATA)) { if (!syncmlDocument.getBody().getAlert().getData().equals(Constants.DISENROLL_ALERT_DATA)) {
pendingOperations = operationHandler.getPendingOperations(syncmlDocument); pendingOperations = operationHandler.getPendingOperations(syncmlDocument);
@ -125,10 +122,6 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
return Response.ok().entity(operationReply.generateReply( return Response.ok().entity(operationReply.generateReply(
syncmlDocument, pendingOperations)).build(); syncmlDocument, pendingOperations)).build();
} }
} else {
String msg = "Failure occurred in Device request message.";
log.error(msg);
return Response.status(Response.Status.BAD_REQUEST).entity(msg).build();
} }
} }
} catch (SyncmlMessageFormatException e) { } catch (SyncmlMessageFormatException e) {
@ -198,35 +191,13 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
existingDevice.setDeviceIdentifier(syncmlDocument.getHeader().getSource().getLocURI()); existingDevice.setDeviceIdentifier(syncmlDocument.getHeader().getSource().getLocURI());
existingDevice.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS); existingDevice.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
status = WindowsAPIUtils.getDeviceManagementService().modifyEnrollment(existingDevice); status = WindowsAPIUtils.getDeviceManagementService().modifyEnrollment(existingDevice);
// call effective policy for the enrolling device.
//PolicyManagerService policyManagerService = WindowsAPIUtils.getPolicyManagerService();
//policyManagerService.getEffectivePolicy(deviceIdentifier);
return status; return status;
} }
} catch (DeviceManagementException e) { } catch (DeviceManagementException e) {
throw new WindowsDeviceEnrolmentException("Failure occurred while enrolling device.", e); throw new WindowsDeviceEnrolmentException("Failure occurred while enrolling device.", e);
// } catch (PolicyManagementException e) {
// throw new WindowsOperationException("Error occurred while getting effective policy.", e);
} finally { } finally {
PrivilegedCarbonContext.endTenantFlow(); PrivilegedCarbonContext.endTenantFlow();
} }
return status; return status;
} }
// public void generateDeviceInfo(Document requestedInfo) {
// SyncmlDocument syncmlDocument;
// syncmlDocument = SyncmlParser.parseSyncmlPayload(requestedInfo);
// DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject(syncmlDocument.
// getHeader().getSource().getLocURI());
// try {
// List<ItemTag> itemList = syncmlDocument.getBody().getResults().getItem();
// Device existingDevice = WindowsAPIUtils.getDeviceManagementService().getDevice(deviceIdentifier);
// org.wso2.carbon.device.mgt.common.device.details.DeviceInfo existingDeviceInfo = existingDevice.getDeviceInfo();
// existingDeviceInfo.s
// } catch (DeviceManagementException e) {
// e.printStackTrace();
// }
//
// }
} }

@ -65,31 +65,31 @@
<Feature code="DISENROLL"> <Feature code="DISENROLL">
<Name>Disenroll</Name> <Name>Disenroll</Name>
<Description>Lock the device</Description> <Description>Lock the device</Description>
<Operation context="/api/device-mgt/windows/v1.0/operation/admin/devices/disenroll" method="POST" type="application/json"> <Operation context="/api/device-mgt/windows/v1.0/admin/devices/disenroll-devices" method="POST" type="application/json">
</Operation> </Operation>
</Feature> </Feature>
<Feature code="WIPE_DATA"> <Feature code="WIPE_DATA">
<Name>Wipe Data</Name> <Name>Wipe Data</Name>
<Description>Lock the device</Description> <Description>Lock the device</Description>
<Operation context="/api/device-mgt/windows/v1.0/operation/admin/devices/wipe-data" method="POST" type="application/json"> <Operation context="/api/device-mgt/windows/v1.0/admin/devices/wipe-devices" method="POST" type="application/json">
</Operation> </Operation>
</Feature> </Feature>
<Feature code="DEVICE_RING"> <Feature code="DEVICE_RING">
<Name>Ring</Name> <Name>Ring</Name>
<Description>Lock the device</Description> <Description>Lock the device</Description>
<Operation context="/api/device-mgt/windows/v1.0/operation/admin/devices/ring-device" method="POST" type="application/json"> <Operation context="/api/device-mgt/windows/v1.0/admin/devices/ring-devices" method="POST" type="application/json">
</Operation> </Operation>
</Feature> </Feature>
<Feature code="DEVICE_LOCK"> <Feature code="DEVICE_LOCK">
<Name>Device Lock</Name> <Name>Device Lock</Name>
<Description>Lock the device</Description> <Description>Lock the device</Description>
<Operation context="/api/device-mgt/windows/v1.0/operation/admin/devices/lock-devices" method="POST" type="application/json"> <Operation context="/api/device-mgt/windows/v1.0/admin/devices/lock-devices" method="POST" type="application/json">
</Operation> </Operation>
</Feature> </Feature>
<Feature code="LOCK_RESET"> <Feature code="LOCK_RESET">
<Name>Device Lock</Name> <Name>Device Lock Reset</Name>
<Description>Lock the device</Description> <Description>Lock the device</Description>
<Operation context="/api/device-mgt/windows/v1.0/operation/admin/devices/lock-reset" method="POST" type="application/json"> <Operation context="/api/device-mgt/windows/v1.0/admin/devices/lock-reset-devices" method="POST" type="application/json">
</Operation> </Operation>
</Feature> </Feature>
<Feature code="DEVICE_INFO"> <Feature code="DEVICE_INFO">

Loading…
Cancel
Save