From 86895c7aa53dc599b8614ac4b0c8fd18e613f121 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Sun, 8 Mar 2015 20:51:46 +0100 Subject: [PATCH] [New] Implemented Rest API for user management --- ch.eitchnet.privilege | 2 +- .../rest/StrolchRestfulExceptionMapper.java | 5 +- .../rest/endpoint/PrivilegeRolesService.java | 67 +++---------------- .../rest/endpoint/PrivilegeUsersService.java | 35 +++------- .../java/li/strolch/rest/model/Result.java | 16 +++++ 5 files changed, 39 insertions(+), 86 deletions(-) diff --git a/ch.eitchnet.privilege b/ch.eitchnet.privilege index eeb335637..5ef43eaeb 160000 --- a/ch.eitchnet.privilege +++ b/ch.eitchnet.privilege @@ -1 +1 @@ -Subproject commit eeb3356372500e6413af613079c7ec71bb1f6e4c +Subproject commit 5ef43eaebe670b0cf3f8ea1ccbc251b2c48f3dca diff --git a/li.strolch.rest/src/main/java/li/strolch/rest/StrolchRestfulExceptionMapper.java b/li.strolch.rest/src/main/java/li/strolch/rest/StrolchRestfulExceptionMapper.java index f4f52a07b..6b79858ea 100644 --- a/li.strolch.rest/src/main/java/li/strolch/rest/StrolchRestfulExceptionMapper.java +++ b/li.strolch.rest/src/main/java/li/strolch/rest/StrolchRestfulExceptionMapper.java @@ -9,6 +9,7 @@ import javax.ws.rs.ext.ExceptionMapper; import javax.ws.rs.ext.Provider; import li.strolch.exception.StrolchAccessDeniedException; +import li.strolch.rest.model.Result; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,8 +45,6 @@ public class StrolchRestfulExceptionMapper implements ExceptionMapper return Response.status(Status.FORBIDDEN).entity(sb.toString()).type(MediaType.TEXT_PLAIN).build(); } - String exceptionMessage = StringHelper.formatExceptionMessage(ex); - return Response.status(Status.INTERNAL_SERVER_ERROR).entity(exceptionMessage).type(MediaType.TEXT_PLAIN) - .build(); + return Response.serverError().entity(new Result(ex)).type(MediaType.APPLICATION_JSON).build(); } } \ No newline at end of file diff --git a/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/PrivilegeRolesService.java b/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/PrivilegeRolesService.java index 3d4871fa3..f73671ecc 100644 --- a/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/PrivilegeRolesService.java +++ b/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/PrivilegeRolesService.java @@ -96,8 +96,8 @@ public class PrivilegeRolesService { try { PrivilegeHandler privilegeHandler = getPrivilegeHandler(cert, true); - privilegeHandler.addRole(cert, newRole); - return Response.ok(new Result(), MediaType.APPLICATION_JSON).build(); + RoleRep role = privilegeHandler.addRole(cert, newRole); + return Response.ok(role, MediaType.APPLICATION_JSON).build(); } catch (AccessDeniedException e) { logger.error(e.getMessage(), e); @@ -107,9 +107,6 @@ public class PrivilegeRolesService { logger.error(e.getMessage(), e); return Response.status(Status.FORBIDDEN).entity(new Result(e.getMessage())) .type(MediaType.APPLICATION_JSON).build(); - } catch (Exception e) { - logger.error(e.getMessage(), e); - return Response.serverError().entity(new Result(e.getMessage())).type(MediaType.APPLICATION_JSON).build(); } } @@ -127,8 +124,8 @@ public class PrivilegeRolesService { .type(MediaType.APPLICATION_JSON).build(); PrivilegeHandler privilegeHandler = getPrivilegeHandler(cert, true); - privilegeHandler.replaceRole(cert, updatedRole); - return Response.ok(new Result(), MediaType.APPLICATION_JSON).build(); + RoleRep role = privilegeHandler.replaceRole(cert, updatedRole); + return Response.ok(role, MediaType.APPLICATION_JSON).build(); } catch (AccessDeniedException e) { logger.error(e.getMessage(), e); @@ -138,9 +135,6 @@ public class PrivilegeRolesService { logger.error(e.getMessage(), e); return Response.status(Status.FORBIDDEN).entity(new Result(e.getMessage())) .type(MediaType.APPLICATION_JSON).build(); - } catch (Exception e) { - logger.error(e.getMessage(), e); - return Response.serverError().entity(new Result(e.getMessage())).type(MediaType.APPLICATION_JSON).build(); } } @@ -153,8 +147,8 @@ public class PrivilegeRolesService { try { PrivilegeHandler privilegeHandler = getPrivilegeHandler(cert, true); - privilegeHandler.removeRole(cert, rolename); - return Response.ok(new Result(), MediaType.APPLICATION_JSON).build(); + RoleRep role = privilegeHandler.removeRole(cert, rolename); + return Response.ok(role, MediaType.APPLICATION_JSON).build(); } catch (AccessDeniedException e) { logger.error(e.getMessage(), e); @@ -164,9 +158,6 @@ public class PrivilegeRolesService { logger.error(e.getMessage(), e); return Response.status(Status.FORBIDDEN).entity(new Result(e.getMessage())) .type(MediaType.APPLICATION_JSON).build(); - } catch (Exception e) { - logger.error(e.getMessage(), e); - return Response.serverError().entity(new Result(e.getMessage())).type(MediaType.APPLICATION_JSON).build(); } } @@ -180,8 +171,8 @@ public class PrivilegeRolesService { try { PrivilegeHandler privilegeHandler = getPrivilegeHandler(cert, true); - privilegeHandler.addOrReplacePrivilegeOnRole(cert, rolename, privilegeRep); - return Response.ok(new Result(), MediaType.APPLICATION_JSON).build(); + RoleRep updatedRole = privilegeHandler.addOrReplacePrivilegeOnRole(cert, rolename, privilegeRep); + return Response.ok(updatedRole, MediaType.APPLICATION_JSON).build(); } catch (AccessDeniedException e) { logger.error(e.getMessage(), e); @@ -191,9 +182,6 @@ public class PrivilegeRolesService { logger.error(e.getMessage(), e); return Response.status(Status.FORBIDDEN).entity(new Result(e.getMessage())) .type(MediaType.APPLICATION_JSON).build(); - } catch (Exception e) { - logger.error(e.getMessage(), e); - return Response.serverError().entity(new Result(e.getMessage())).type(MediaType.APPLICATION_JSON).build(); } } @@ -207,8 +195,8 @@ public class PrivilegeRolesService { try { PrivilegeHandler privilegeHandler = getPrivilegeHandler(cert, true); - privilegeHandler.removePrivilegeFromRole(cert, rolename, privilege); - return Response.ok(new Result(), MediaType.APPLICATION_JSON).build(); + RoleRep updatedRole = privilegeHandler.removePrivilegeFromRole(cert, rolename, privilege); + return Response.ok(updatedRole, MediaType.APPLICATION_JSON).build(); } catch (AccessDeniedException e) { logger.error(e.getMessage(), e); @@ -218,41 +206,6 @@ public class PrivilegeRolesService { logger.error(e.getMessage(), e); return Response.status(Status.FORBIDDEN).entity(new Result(e.getMessage())) .type(MediaType.APPLICATION_JSON).build(); - } catch (Exception e) { - logger.error(e.getMessage(), e); - return Response.serverError().entity(new Result(e.getMessage())).type(MediaType.APPLICATION_JSON).build(); - } - } - - @PUT - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - @Path("{rolename}/privileges/{privilege}") - public Response addOrReplacePrivilegeOnRole(@PathParam("rolename") String rolename, - @PathParam("privilege") String privilege, PrivilegeRep privilegeRep, @Context HttpServletRequest request) { - Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE); - try { - - if (!privilege.equals(privilegeRep.getName())) - return Response.serverError() - .entity(new Result("Path privilege and data do not have same privilege name!")) - .type(MediaType.APPLICATION_JSON).build(); - - PrivilegeHandler privilegeHandler = getPrivilegeHandler(cert, true); - privilegeHandler.addOrReplacePrivilegeOnRole(cert, rolename, privilegeRep); - return Response.ok(new Result(), MediaType.APPLICATION_JSON).build(); - - } catch (AccessDeniedException e) { - logger.error(e.getMessage(), e); - return Response.status(Status.UNAUTHORIZED).entity(new Result(e.getMessage())) - .type(MediaType.APPLICATION_JSON).build(); - } catch (PrivilegeException e) { - logger.error(e.getMessage(), e); - return Response.status(Status.FORBIDDEN).entity(new Result(e.getMessage())) - .type(MediaType.APPLICATION_JSON).build(); - } catch (Exception e) { - logger.error(e.getMessage(), e); - return Response.serverError().entity(new Result(e.getMessage())).type(MediaType.APPLICATION_JSON).build(); } } } diff --git a/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/PrivilegeUsersService.java b/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/PrivilegeUsersService.java index c12c8100c..cea19b2e6 100644 --- a/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/PrivilegeUsersService.java +++ b/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/PrivilegeUsersService.java @@ -109,8 +109,8 @@ public class PrivilegeUsersService { try { PrivilegeHandler privilegeHandler = getPrivilegeHandler(cert, true); - privilegeHandler.addUser(cert, newUser, null); - return Response.ok(new Result(), MediaType.APPLICATION_JSON).build(); + UserRep user = privilegeHandler.addUser(cert, newUser, null); + return Response.ok(user, MediaType.APPLICATION_JSON).build(); } catch (AccessDeniedException e) { logger.error(e.getMessage(), e); @@ -120,9 +120,6 @@ public class PrivilegeUsersService { logger.error(e.getMessage(), e); return Response.status(Status.FORBIDDEN).entity(new Result(e.getMessage())) .type(MediaType.APPLICATION_JSON).build(); - } catch (Exception e) { - logger.error(e.getMessage(), e); - return Response.serverError().entity(new Result(e.getMessage())).type(MediaType.APPLICATION_JSON).build(); } } @@ -135,8 +132,8 @@ public class PrivilegeUsersService { try { PrivilegeHandler privilegeHandler = getPrivilegeHandler(cert, true); - privilegeHandler.removeUser(cert, username); - return Response.ok(new Result(), MediaType.APPLICATION_JSON).build(); + UserRep user = privilegeHandler.removeUser(cert, username); + return Response.ok(user, MediaType.APPLICATION_JSON).build(); } catch (AccessDeniedException e) { logger.error(e.getMessage(), e); @@ -146,9 +143,6 @@ public class PrivilegeUsersService { logger.error(e.getMessage(), e); return Response.status(Status.FORBIDDEN).entity(new Result(e.getMessage())) .type(MediaType.APPLICATION_JSON).build(); - } catch (Exception e) { - logger.error(e.getMessage(), e); - return Response.serverError().entity(new Result(e.getMessage())).type(MediaType.APPLICATION_JSON).build(); } } @@ -166,8 +160,8 @@ public class PrivilegeUsersService { .type(MediaType.APPLICATION_JSON).build(); PrivilegeHandler privilegeHandler = getPrivilegeHandler(cert, true); - privilegeHandler.updateUser(cert, updatedFields); - return Response.ok(new Result(), MediaType.APPLICATION_JSON).build(); + UserRep updatedUser = privilegeHandler.updateUser(cert, updatedFields); + return Response.ok(updatedUser, MediaType.APPLICATION_JSON).build(); } catch (AccessDeniedException e) { logger.error(e.getMessage(), e); @@ -177,9 +171,6 @@ public class PrivilegeUsersService { logger.error(e.getMessage(), e); return Response.status(Status.FORBIDDEN).entity(new Result(e.getMessage())) .type(MediaType.APPLICATION_JSON).build(); - } catch (Exception e) { - logger.error(e.getMessage(), e); - return Response.serverError().entity(new Result(e.getMessage())).type(MediaType.APPLICATION_JSON).build(); } } @@ -193,8 +184,8 @@ public class PrivilegeUsersService { try { PrivilegeHandler privilegeHandler = getPrivilegeHandler(cert, true); - privilegeHandler.addRoleToUser(cert, username, rolename); - return Response.ok(new Result(), MediaType.APPLICATION_JSON).build(); + UserRep updatedUser = privilegeHandler.addRoleToUser(cert, username, rolename); + return Response.ok(updatedUser, MediaType.APPLICATION_JSON).build(); } catch (AccessDeniedException e) { logger.error(e.getMessage(), e); @@ -204,9 +195,6 @@ public class PrivilegeUsersService { logger.error(e.getMessage(), e); return Response.status(Status.FORBIDDEN).entity(new Result(e.getMessage())) .type(MediaType.APPLICATION_JSON).build(); - } catch (Exception e) { - logger.error(e.getMessage(), e); - return Response.serverError().entity(new Result(e.getMessage())).type(MediaType.APPLICATION_JSON).build(); } } @@ -220,8 +208,8 @@ public class PrivilegeUsersService { try { PrivilegeHandler privilegeHandler = getPrivilegeHandler(cert, true); - privilegeHandler.removeRoleFromUser(cert, username, rolename); - return Response.ok(new Result(), MediaType.APPLICATION_JSON).build(); + UserRep updatedUser = privilegeHandler.removeRoleFromUser(cert, username, rolename); + return Response.ok(updatedUser, MediaType.APPLICATION_JSON).build(); } catch (AccessDeniedException e) { logger.error(e.getMessage(), e); @@ -231,9 +219,6 @@ public class PrivilegeUsersService { logger.error(e.getMessage(), e); return Response.status(Status.FORBIDDEN).entity(new Result(e.getMessage())) .type(MediaType.APPLICATION_JSON).build(); - } catch (Exception e) { - logger.error(e.getMessage(), e); - return Response.serverError().entity(new Result(e.getMessage())).type(MediaType.APPLICATION_JSON).build(); } } diff --git a/li.strolch.rest/src/main/java/li/strolch/rest/model/Result.java b/li.strolch.rest/src/main/java/li/strolch/rest/model/Result.java index fbcc48848..174ffec70 100644 --- a/li.strolch.rest/src/main/java/li/strolch/rest/model/Result.java +++ b/li.strolch.rest/src/main/java/li/strolch/rest/model/Result.java @@ -32,10 +32,18 @@ public class Result { @XmlAttribute(name = "msg") private String msg; + @XmlAttribute(name = "exceptionMsg") + private String exceptionMsg; + public Result(String msg) { this.msg = msg; } + public Result(Exception e) { + this.msg = StringHelper.isEmpty(e.getMessage()) ? e.getClass().getName() : e.getMessage(); + this.exceptionMsg = StringHelper.formatExceptionMessage(e); + } + public Result() { this.msg = StringHelper.DASH; } @@ -47,4 +55,12 @@ public class Result { public void setMsg(String msg) { this.msg = msg; } + + public String getExceptionMsg() { + return exceptionMsg; + } + + public void setExceptionMsg(String exceptionMsg) { + this.exceptionMsg = exceptionMsg; + } }