diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UserServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UserServlet.java index 43ad9b34e21cc73856eaf6d284dee89c02cf38b9..1a4e1c174bf67b823c8ac57fa776740aee99f62f 100644 --- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UserServlet.java +++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UserServlet.java @@ -39,9 +39,13 @@ import net.jami.jams.common.objects.user.User; import net.jami.jams.server.core.workflows.RevokeUserFlow; import org.apache.commons.codec.binary.Base64; import org.json.JSONObject; +import java.util.List; +import net.jami.jams.common.objects.devices.Device; +import net.jami.jams.server.core.workflows.RevokeDeviceFlow; import java.io.IOException; import java.util.HashMap; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import static net.jami.jams.server.Server.certificateAuthority; @@ -153,8 +157,20 @@ public class UserServlet extends HttpServlet { @Override @ScopedServletMethod(securityGroups = {AccessLevel.ADMIN}) protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws IOException { - DeviceRevocationResponse devResponse = RevokeUserFlow.revokeUser(req.getParameter("username")); - if(devResponse != null && devResponse.isSuccess()) resp.getOutputStream().write(JsonStream.serialize(devResponse).getBytes()); + AtomicReference<DeviceRevocationResponse> devResponse = new AtomicReference<>(RevokeUserFlow.revokeUser(req.getParameter("username"))); + StatementList statementList = new StatementList(); + StatementElement st1 = new StatementElement("owner","=",req.getParameter("username"),""); + statementList.addStatement(st1); + List<Device> devices = dataStore.getDeviceDao().getObjects(statementList); + if(certificateAuthority.getLatestCRL() != null) { + devices.forEach(device -> { + if(certificateAuthority.getLatestCRL().get().getRevokedCertificate(device.getCertificate().getSerialNumber()) == null) + devResponse.set(RevokeDeviceFlow.revokeDevice(req.getParameter("username").toString(), device.getDeviceId())); + }); + } + if(devResponse.get() != null && devResponse.get().isSuccess()){ + resp.getOutputStream().write(JsonStream.serialize(devResponse).getBytes()); + } else resp.sendError(500,"An exception has occurred while trying to revoke a user!"); } } \ No newline at end of file