Merge branch 'delete-device' into 'master'

Modify android disenroll device API to support permanently delete device

See merge request entgra/carbon-device-mgt-plugins!51
revert-dabc3590
Charitha Goonetilleke 6 years ago
commit d4f0bf7a20

@ -63,6 +63,11 @@ public class TestDeviceManager implements DeviceManager {
return true;
}
@Override
public boolean deleteDevice(DeviceIdentifier deviceId, Device device) throws DeviceManagementException {
return true;
}
@Override
public boolean isEnrolled(DeviceIdentifier deviceId) throws DeviceManagementException {
return true;

@ -15,6 +15,22 @@
* specific language governing permissions and limitations
* under the License.
*
*
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
*
* Entgra (Pvt) Ltd. 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.mdm.services.android.services;
@ -40,6 +56,7 @@ import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.List;
@ -406,6 +423,10 @@ public interface DeviceManagementService {
@ApiParam(
name = "id",
value = "The unique device identifier.")
@PathParam("id") String id);
@PathParam("id") String id,
@ApiParam(
name = "permanentDelete",
value = "Boolean flag indicating whether to permanently delete the device.")
@QueryParam("permanentDelete") boolean permanentDelete);
}

@ -78,6 +78,7 @@ import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
@ -446,26 +447,40 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
@DELETE
@Path("/{id}")
@Override
public Response disEnrollDevice(@PathParam("id") String id) {
public Response disEnrollDevice(@PathParam("id") String id,
@QueryParam("permanentDelete") boolean permanentDelete) {
boolean result;
DeviceIdentifier deviceIdentifier = AndroidDeviceUtils.convertToDeviceIdentifierObject(id);
try {
result = AndroidAPIUtils.getDeviceManagementService().disenrollDevice(deviceIdentifier);
if (permanentDelete) {
result = AndroidAPIUtils.getDeviceManagementService().deleteDevice(deviceIdentifier);
} else {
AndroidDeviceUtils.updateDisEnrollOperationStatus(deviceIdentifier);
result = AndroidAPIUtils.getDeviceManagementService().disenrollDevice(deviceIdentifier);
}
if (result) {
String msg = "Android device that carries id '" + id + "' is successfully ";
Message responseMessage = new Message();
responseMessage.setResponseCode(Response.Status.OK.toString());
responseMessage.setResponseMessage("Android device that carries id '" + id +
"' has successfully dis-enrolled");
if (permanentDelete) {
responseMessage.setResponseMessage(msg + "deleted");
} else {
responseMessage.setResponseMessage(msg + "dis-enrolled");
}
return Response.status(Response.Status.OK).entity(responseMessage).build();
} else {
Message responseMessage = new Message();
responseMessage.setResponseCode(Response.Status.NOT_FOUND.toString());
responseMessage.setResponseMessage("Android device that carries id '" + id +
"' has not been dis-enrolled");
responseMessage.setResponseMessage("Android device that carries id '" + id + "' is not available");
return Response.status(Response.Status.NOT_FOUND).entity(responseMessage).build();
}
} catch (DeviceManagementException e) {
String msg = "Error occurred while dis-enrolling the Android device that carries the id '" + id + "'";
String msg = "Error occurred while %s the Android device that carries the id '" + id + "'";
if (permanentDelete) {
msg = String.format(msg, "deleting");
} else {
msg = String.format(msg, "dis-enrolling");
}
log.error(msg, e);
throw new UnexpectedServerErrorException(
new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());

@ -572,4 +572,25 @@ public class AndroidDeviceUtils {
}
}
/**
* Update status of pending operations to error when a dis-enroll operation is triggered.
*
* @param deviceIdentifier Identifier of the device
* @throws DeviceManagementException
*/
public static void updateDisEnrollOperationStatus(DeviceIdentifier deviceIdentifier)
throws DeviceManagementException {
try {
List<? extends Operation> pendingOperations = getPendingOperations(deviceIdentifier);
for (Operation operation : pendingOperations) {
operation.setStatus(Operation.Status.ERROR);
AndroidAPIUtils.getDeviceManagementService().updateOperation(deviceIdentifier, operation);
}
} catch (OperationManagementException e) {
String msg = "Error occurred while retrieving pending operations to update operation statuses of " +
"device to be dis-enrolled";
log.error(msg);
throw new DeviceManagementException(msg, e);
}
}
}

@ -300,7 +300,7 @@ public class DeviceManagementServiceTests {
public void testDisEnrollDeviceSuccess()
throws DeviceManagementException, OperationManagementException, InvalidDeviceException {
mockDeviceManagementService();
Response response = deviceManagementService.disEnrollDevice(TestUtils.getDeviceId());
Response response = deviceManagementService.disEnrollDevice(TestUtils.getDeviceId(), false);
Assert.assertNotNull(response);
Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
}
@ -309,7 +309,7 @@ public class DeviceManagementServiceTests {
public void testDisenrollUnSuccess()
throws DeviceManagementException, OperationManagementException, InvalidDeviceException {
mockDeviceManagementService();
Response response = deviceManagementService.disEnrollDevice("1234");
Response response = deviceManagementService.disEnrollDevice("1234", false);
Assert.assertNotNull(response);
Assert.assertEquals(response.getStatus(), Response.Status.NOT_FOUND.getStatusCode());
}

@ -220,6 +220,12 @@ public class AndroidDeviceManager implements DeviceManager {
return true;
}
@Override
public boolean deleteDevice(DeviceIdentifier deviceId, Device device) throws DeviceManagementException {
//Returning false since AndroidDeviceManager is not used instead DeviceTypeManager is used.
return false;
}
@Override
public boolean isEnrolled(DeviceIdentifier deviceId) throws DeviceManagementException {
boolean isEnrolled = false;

@ -168,6 +168,12 @@ public class WindowsDeviceManager implements DeviceManager {
return true;
}
@Override
public boolean deleteDevice(DeviceIdentifier deviceId, Device device) throws DeviceManagementException {
//Returning false since WindowsDeviceManager is not used instead DeviceTypeManager is used.
return false;
}
@Override
public boolean isEnrolled(DeviceIdentifier deviceId) throws DeviceManagementException {
boolean isEnrolled = false;

@ -1242,7 +1242,7 @@
<javax.ws.rs.version>1.1.1</javax.ws.rs.version>
<!-- Carbon Device Management -->
<carbon.devicemgt.version>3.2.6</carbon.devicemgt.version>
<carbon.devicemgt.version>3.2.7-SNAPSHOT</carbon.devicemgt.version>
<carbon.devicemgt.version.range>[3.1.0, 4.0.0)</carbon.devicemgt.version.range>
<!-- Carbon App Management -->

Loading…
Cancel
Save