@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MEDIATYPE_JSON_JAVASCRIPT)
public Response addUser(@Context HttpServletRequest request,
byte[] userBytes) throws Exception {
RestResponseBuilder response = RestResponseBuilder.forRequest(request);
if (!request.isUserInRole(SecurityService.ADMIN_ROLE)) {
return response.status(Response.Status.FORBIDDEN).build();
}
JsonNode node = readTree(userBytes);
JsonNode userNode = node.get("user");
JsonNode passwordNode = node.get("password");
JsonNode rolesNode = node.get("roles");
if ((userNode == null) || !userNode.isTextual()) {
return badRequest(response, "user string required");
}
if ((passwordNode == null) || !passwordNode.isTextual()) {
return badRequest(response, "password string required");
}
if ((rolesNode == null) || !rolesNode.isArray()) {
return badRequest(response, "roles array required");
}
final String user = userNode.asText();
final String password = passwordNode.asText();
final List<String> roles = new ArrayList<>();
for (JsonNode elem : rolesNode) {
roles.add(elem.asText());
}
response.body(new RestResponseBuilder.BodyGenerator() {
@Override
public void write(PrintWriter writer) throws Exception {
User newUser = reqs.securityService.addUser(user, password, roles);
writer.write("{\"id\":");
writer.print(newUser.getId());
writer.write('}');
}
});
return response.build();
}