[Major] Refactored PrivilegeRemoveUserService into service with command

This commit is contained in:
Robert von Burg 2021-08-19 15:01:54 +02:00
parent 138e03763a
commit 1ac594f78e
3 changed files with 64 additions and 32 deletions

View File

@ -17,6 +17,7 @@ package li.strolch.rest.endpoint;
import static java.util.Comparator.comparing; import static java.util.Comparator.comparing;
import static li.strolch.privilege.handler.PrivilegeHandler.PRIVILEGE_GET_USER; import static li.strolch.privilege.handler.PrivilegeHandler.PRIVILEGE_GET_USER;
import static li.strolch.rest.helper.ResponseUtil.toResponse;
import static li.strolch.rest.helper.RestfulHelper.toJson; import static li.strolch.rest.helper.RestfulHelper.toJson;
import static li.strolch.search.SearchBuilder.buildSimpleValueSearch; import static li.strolch.search.SearchBuilder.buildSimpleValueSearch;
@ -44,7 +45,6 @@ import li.strolch.privilege.model.UserState;
import li.strolch.rest.RestfulStrolchComponent; import li.strolch.rest.RestfulStrolchComponent;
import li.strolch.rest.StrolchRestfulConstants; import li.strolch.rest.StrolchRestfulConstants;
import li.strolch.rest.StrolchSessionHandler; import li.strolch.rest.StrolchSessionHandler;
import li.strolch.rest.helper.ResponseUtil;
import li.strolch.rest.model.QueryData; import li.strolch.rest.model.QueryData;
import li.strolch.search.SearchResult; import li.strolch.search.SearchResult;
import li.strolch.search.ValueSearch; import li.strolch.search.ValueSearch;
@ -168,8 +168,8 @@ public class PrivilegeUsersService {
PrivilegeUserNameArgument arg = new PrivilegeUserNameArgument(); PrivilegeUserNameArgument arg = new PrivilegeUserNameArgument();
arg.username = username; arg.username = username;
PrivilegeUserResult svcResult = svcHandler.doService(cert, svc, arg); ServiceResult svcResult = svcHandler.doService(cert, svc, arg);
return handleServiceResult(svcResult); return toResponse(svcResult);
} }
@PUT @PUT
@ -255,7 +255,7 @@ public class PrivilegeUsersService {
userState = UserState.valueOf(state); userState = UserState.valueOf(state);
} catch (Exception e) { } catch (Exception e) {
String msg = MessageFormat.format("UserState {0} is not valid!", state); String msg = MessageFormat.format("UserState {0} is not valid!", state);
return ResponseUtil.toResponse(msg); return toResponse(msg);
} }
ServiceHandler svcHandler = RestfulStrolchComponent.getInstance().getComponent(ServiceHandler.class); ServiceHandler svcHandler = RestfulStrolchComponent.getInstance().getComponent(ServiceHandler.class);
@ -280,7 +280,7 @@ public class PrivilegeUsersService {
locale = new Locale(localeS); locale = new Locale(localeS);
} catch (Exception e) { } catch (Exception e) {
String msg = MessageFormat.format("Locale {0} is not valid!", localeS); String msg = MessageFormat.format("Locale {0} is not valid!", localeS);
return ResponseUtil.toResponse(msg); return toResponse(msg);
} }
ServiceHandler svcHandler = RestfulStrolchComponent.getInstance().getComponent(ServiceHandler.class); ServiceHandler svcHandler = RestfulStrolchComponent.getInstance().getComponent(ServiceHandler.class);
@ -313,7 +313,7 @@ public class PrivilegeUsersService {
ServiceResult svcResult = svcHandler.doService(cert, svc, arg); ServiceResult svcResult = svcHandler.doService(cert, svc, arg);
if (svcResult.isNok()) if (svcResult.isNok())
return ResponseUtil.toResponse(svcResult); return toResponse(svcResult);
// if user changes their own password, then invalidate the session // if user changes their own password, then invalidate the session
if (cert.getUsername().equals(username)) { if (cert.getUsername().equals(username)) {
@ -321,7 +321,7 @@ public class PrivilegeUsersService {
sessionHandler.invalidate(cert); sessionHandler.invalidate(cert);
} }
return ResponseUtil.toResponse(); return toResponse();
} }
@PUT @PUT
@ -339,7 +339,7 @@ public class PrivilegeUsersService {
arg.map.put(Tags.Json.STATE, jsonObject.get(Tags.Json.STATE).getAsString()); arg.map.put(Tags.Json.STATE, jsonObject.get(Tags.Json.STATE).getAsString());
ServiceResult svcResult = svcHandler.doService(cert, svc, arg); ServiceResult svcResult = svcHandler.doService(cert, svc, arg);
return ResponseUtil.toResponse(svcResult); return toResponse(svcResult);
} }
@DELETE @DELETE
@ -353,16 +353,15 @@ public class PrivilegeUsersService {
arg.username = username; arg.username = username;
ServiceResult svcResult = svcHandler.doService(cert, svc, arg); ServiceResult svcResult = svcHandler.doService(cert, svc, arg);
return ResponseUtil.toResponse(svcResult); return toResponse(svcResult);
} }
private Response handleServiceResult(PrivilegeUserResult svcResult) { private Response handleServiceResult(PrivilegeUserResult svcResult) {
if (svcResult.isOk()) { if (svcResult.isOk()) {
UserRep userRep = svcResult.getUser(); UserRep userRep = svcResult.getUser();
return Response return Response.ok(userRep.accept(new PrivilegeElementToJsonVisitor()).toString(),
.ok(userRep.accept(new PrivilegeElementToJsonVisitor()).toString(), MediaType.APPLICATION_JSON) MediaType.APPLICATION_JSON).build();
.build();
} }
return ResponseUtil.toResponse(svcResult); return toResponse(svcResult);
} }
} }

View File

@ -0,0 +1,42 @@
package li.strolch.service.privilege.users;
import static li.strolch.runtime.StrolchConstants.StrolchPrivilegeConstants.PRIVILEGE;
import static li.strolch.runtime.StrolchConstants.StrolchPrivilegeConstants.USER;
import li.strolch.model.audit.AccessType;
import li.strolch.model.audit.Audit;
import li.strolch.persistence.api.StrolchTransaction;
import li.strolch.privilege.handler.PrivilegeHandler;
import li.strolch.service.api.Command;
import li.strolch.utils.dbc.DBC;
public class PrivilegeRemoveUserCommand extends Command {
private String username;
public PrivilegeRemoveUserCommand(StrolchTransaction tx) {
super(tx);
}
public void setUsername(String username) {
this.username = username;
}
@Override
public void validate() {
DBC.PRE.assertNotEmpty("username must be set", this.username);
}
@Override
public void doCommand() {
li.strolch.runtime.privilege.PrivilegeHandler strolchPrivilegeHandler = getContainer().getPrivilegeHandler();
PrivilegeHandler privilegeHandler = strolchPrivilegeHandler.getPrivilegeHandler();
privilegeHandler.removeUser(tx().getCertificate(), this.username);
privilegeHandler.persist(tx().getCertificate());
Audit audit = tx().auditFrom(AccessType.DELETE, PRIVILEGE, USER, this.username);
tx().getAuditTrail().add(tx(), audit);
}
}

View File

@ -15,23 +15,20 @@
*/ */
package li.strolch.service.privilege.users; package li.strolch.service.privilege.users;
import li.strolch.model.audit.AccessType;
import li.strolch.model.audit.Audit;
import li.strolch.persistence.api.StrolchTransaction; import li.strolch.persistence.api.StrolchTransaction;
import li.strolch.privilege.handler.PrivilegeHandler; import li.strolch.privilege.handler.PrivilegeHandler;
import li.strolch.privilege.model.UserRep;
import li.strolch.runtime.StrolchConstants.StrolchPrivilegeConstants;
import li.strolch.service.api.AbstractService; import li.strolch.service.api.AbstractService;
import li.strolch.service.api.ServiceResult;
import li.strolch.service.api.ServiceResultState; import li.strolch.service.api.ServiceResultState;
/** /**
* @author Robert von Burg <eitch@eitchnet.ch> * @author Robert von Burg <eitch@eitchnet.ch>
*/ */
public class PrivilegeRemoveUserService extends AbstractService<PrivilegeUserNameArgument, PrivilegeUserResult> { public class PrivilegeRemoveUserService extends AbstractService<PrivilegeUserNameArgument, ServiceResult> {
@Override @Override
protected PrivilegeUserResult getResultInstance() { protected ServiceResult getResultInstance() {
return new PrivilegeUserResult(ServiceResultState.FAILED); return new ServiceResult(ServiceResultState.FAILED);
} }
@Override @Override
@ -40,24 +37,18 @@ public class PrivilegeRemoveUserService extends AbstractService<PrivilegeUserNam
} }
@Override @Override
protected PrivilegeUserResult internalDoService(PrivilegeUserNameArgument arg) throws Exception { protected ServiceResult internalDoService(PrivilegeUserNameArgument arg) throws Exception {
li.strolch.runtime.privilege.PrivilegeHandler strolchPrivilegeHandler = getContainer().getPrivilegeHandler();
PrivilegeHandler privilegeHandler = strolchPrivilegeHandler.getPrivilegeHandler();
UserRep user;
try (StrolchTransaction tx = openArgOrUserTx(arg, PrivilegeHandler.PRIVILEGE_REMOVE_USER)) { try (StrolchTransaction tx = openArgOrUserTx(arg, PrivilegeHandler.PRIVILEGE_REMOVE_USER)) {
tx.setSuppressAudits(true); tx.setSuppressAudits(true);
user = privilegeHandler.removeUser(getCertificate(), arg.username); PrivilegeRemoveUserCommand cmd = new PrivilegeRemoveUserCommand(tx);
privilegeHandler.persist(getCertificate()); cmd.setUsername(arg.username);
tx.addCommand(cmd);
Audit audit = tx tx.commitOnClose();
.auditFrom(AccessType.DELETE, StrolchPrivilegeConstants.PRIVILEGE, StrolchPrivilegeConstants.USER,
user.getUsername());
tx.getAuditTrail().add(tx, audit);
} }
return new PrivilegeUserResult(user); return ServiceResult.success();
} }
} }