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; return true;
} }
@Override
public boolean deleteDevice(DeviceIdentifier deviceId, Device device) throws DeviceManagementException {
return true;
}
@Override @Override
public boolean isEnrolled(DeviceIdentifier deviceId) throws DeviceManagementException { public boolean isEnrolled(DeviceIdentifier deviceId) throws DeviceManagementException {
return true; return true;

@ -15,6 +15,22 @@
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * 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; 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.Path;
import javax.ws.rs.PathParam; import javax.ws.rs.PathParam;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import java.util.List; import java.util.List;
@ -406,6 +423,10 @@ public interface DeviceManagementService {
@ApiParam( @ApiParam(
name = "id", name = "id",
value = "The unique device identifier.") 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.Path;
import javax.ws.rs.PathParam; import javax.ws.rs.PathParam;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import java.util.ArrayList; import java.util.ArrayList;
@ -446,26 +447,40 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
@DELETE @DELETE
@Path("/{id}") @Path("/{id}")
@Override @Override
public Response disEnrollDevice(@PathParam("id") String id) { public Response disEnrollDevice(@PathParam("id") String id,
@QueryParam("permanentDelete") boolean permanentDelete) {
boolean result; boolean result;
DeviceIdentifier deviceIdentifier = AndroidDeviceUtils.convertToDeviceIdentifierObject(id); DeviceIdentifier deviceIdentifier = AndroidDeviceUtils.convertToDeviceIdentifierObject(id);
try { try {
result = AndroidAPIUtils.getDeviceManagementService().disenrollDevice(deviceIdentifier); if (permanentDelete) {
result = AndroidAPIUtils.getDeviceManagementService().deleteDevice(deviceIdentifier);
} else {
AndroidDeviceUtils.updateDisEnrollOperationStatus(deviceIdentifier);
result = AndroidAPIUtils.getDeviceManagementService().disenrollDevice(deviceIdentifier);
}
if (result) { if (result) {
String msg = "Android device that carries id '" + id + "' is successfully ";
Message responseMessage = new Message(); Message responseMessage = new Message();
responseMessage.setResponseCode(Response.Status.OK.toString()); responseMessage.setResponseCode(Response.Status.OK.toString());
responseMessage.setResponseMessage("Android device that carries id '" + id + if (permanentDelete) {
"' has successfully dis-enrolled"); responseMessage.setResponseMessage(msg + "deleted");
} else {
responseMessage.setResponseMessage(msg + "dis-enrolled");
}
return Response.status(Response.Status.OK).entity(responseMessage).build(); return Response.status(Response.Status.OK).entity(responseMessage).build();
} else { } else {
Message responseMessage = new Message(); Message responseMessage = new Message();
responseMessage.setResponseCode(Response.Status.NOT_FOUND.toString()); responseMessage.setResponseCode(Response.Status.NOT_FOUND.toString());
responseMessage.setResponseMessage("Android device that carries id '" + id + responseMessage.setResponseMessage("Android device that carries id '" + id + "' is not available");
"' has not been dis-enrolled");
return Response.status(Response.Status.NOT_FOUND).entity(responseMessage).build(); return Response.status(Response.Status.NOT_FOUND).entity(responseMessage).build();
} }
} catch (DeviceManagementException e) { } 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); log.error(msg, e);
throw new UnexpectedServerErrorException( throw new UnexpectedServerErrorException(
new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build()); 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() public void testDisEnrollDeviceSuccess()
throws DeviceManagementException, OperationManagementException, InvalidDeviceException { throws DeviceManagementException, OperationManagementException, InvalidDeviceException {
mockDeviceManagementService(); mockDeviceManagementService();
Response response = deviceManagementService.disEnrollDevice(TestUtils.getDeviceId()); Response response = deviceManagementService.disEnrollDevice(TestUtils.getDeviceId(), false);
Assert.assertNotNull(response); Assert.assertNotNull(response);
Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode()); Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
} }
@ -309,7 +309,7 @@ public class DeviceManagementServiceTests {
public void testDisenrollUnSuccess() public void testDisenrollUnSuccess()
throws DeviceManagementException, OperationManagementException, InvalidDeviceException { throws DeviceManagementException, OperationManagementException, InvalidDeviceException {
mockDeviceManagementService(); mockDeviceManagementService();
Response response = deviceManagementService.disEnrollDevice("1234"); Response response = deviceManagementService.disEnrollDevice("1234", false);
Assert.assertNotNull(response); Assert.assertNotNull(response);
Assert.assertEquals(response.getStatus(), Response.Status.NOT_FOUND.getStatusCode()); Assert.assertEquals(response.getStatus(), Response.Status.NOT_FOUND.getStatusCode());
} }

@ -220,6 +220,12 @@ public class AndroidDeviceManager implements DeviceManager {
return true; 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 @Override
public boolean isEnrolled(DeviceIdentifier deviceId) throws DeviceManagementException { public boolean isEnrolled(DeviceIdentifier deviceId) throws DeviceManagementException {
boolean isEnrolled = false; boolean isEnrolled = false;

@ -168,6 +168,12 @@ public class WindowsDeviceManager implements DeviceManager {
return true; 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 @Override
public boolean isEnrolled(DeviceIdentifier deviceId) throws DeviceManagementException { public boolean isEnrolled(DeviceIdentifier deviceId) throws DeviceManagementException {
boolean isEnrolled = false; boolean isEnrolled = false;

@ -1242,7 +1242,7 @@
<javax.ws.rs.version>1.1.1</javax.ws.rs.version> <javax.ws.rs.version>1.1.1</javax.ws.rs.version>
<!-- Carbon Device Management --> <!-- 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.devicemgt.version.range>[3.1.0, 4.0.0)</carbon.devicemgt.version.range>
<!-- Carbon App Management --> <!-- Carbon App Management -->

Loading…
Cancel
Save