List of usage examples for io.vertx.core.json JsonArray encode
public String encode()
From source file:org.entcore.workspace.security.WorkspaceResourcesProvider.java
License:Open Source License
private void authorizeDocuments(HttpServerRequest request, UserInfos user, String serviceMethod, Handler<Boolean> handler) { String ids = request.params().get("ids"); if (ids != null && !ids.trim().isEmpty()) { JsonArray idsArray = new fr.wseduc.webutils.collections.JsonArray(Arrays.asList(ids.split(","))); String query = "{ \"_id\": { \"$in\" : " + idsArray.encode() + "}, " + "\"$or\" : [{ \"owner\": \"" + user.getUserId() + "\"}, {\"shared\" : { \"$elemMatch\" : " + orSharedElementMatch(user, serviceMethod) + "}}]}"; executeCountQuery(request, DocumentDao.DOCUMENTS_COLLECTION, new JsonObject(query), idsArray.size(), handler);//from w w w. jav a 2 s. c om } else { handler.handle(false); } }
From source file:org.entcore.workspace.service.impl.DefaultFolderService.java
License:Open Source License
@Override public void delete(String id, final UserInfos owner, final Handler<Either<String, JsonArray>> result) { if (owner == null) { result.handle(new Either.Left<String, JsonArray>("workspace.invalid.user")); return;//from w w w . j av a 2s . c o m } if (id == null || id.trim().isEmpty()) { result.handle(new Either.Left<String, JsonArray>("workspace.folder.not.found")); return; } QueryBuilder query = QueryBuilder.start("_id").is(id).put("owner").is(owner.getUserId()); JsonObject keys = new JsonObject().put("folder", 1); mongo.findOne(DOCUMENTS_COLLECTION, MongoQueryBuilder.build(query), keys, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> event) { String folder = event.body().getJsonObject("result", new JsonObject()).getString("folder"); if ("ok".equals(event.body().getString("status")) && folder != null && !folder.trim().isEmpty()) { QueryBuilder q = QueryBuilder.start("owner").is(owner.getUserId()).put("folder") .regex(Pattern.compile("^" + Pattern.quote(folder) + "($|_)")); JsonObject keys = new JsonObject().put("metadata", 1).put("owner", 1).put("name", 1) .put("file", 1); final JsonObject query = MongoQueryBuilder.build(q); mongo.find(DOCUMENTS_COLLECTION, query, null, keys, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> message) { final JsonArray results = message.body().getJsonArray("results"); if ("ok".equals(message.body().getString("status")) && results != null) { mongo.delete(DOCUMENTS_COLLECTION, query, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> res) { if ("ok".equals(res.body().getString("status"))) { result.handle( new Either.Right<String, JsonArray>(results)); final JsonArray filesIds = new fr.wseduc.webutils.collections.JsonArray(); for (Object o : results) { if (!(o instanceof JsonObject)) continue; String file = ((JsonObject) o).getString("file"); if (file != null && !file.trim().isEmpty()) { filesIds.add(file); } } if (filesIds.size() > 0) { storage.removeFiles(filesIds, new Handler<JsonObject>() { @Override public void handle( JsonObject jsonObject) { if (!"ok".equals(jsonObject .getString("status"))) { log.error( "Error deleting gridfs files : " + filesIds .encode()); log.error(jsonObject .getString("message")); } } }); } } else { result.handle(new Either.Left<String, JsonArray>( res.body().getString("message"))); } } }); } else { result.handle(new Either.Left<String, JsonArray>( message.body().getString("message"))); } } }); } else { result.handle(new Either.Left<String, JsonArray>("workspace.folder.not.found")); } } }); }
From source file:org.entcore.workspace.service.WorkspaceService.java
License:Open Source License
private void copyFiles(final HttpServerRequest request, final String collection, final String owner, final UserInfos user) { String ids = request.params().get("ids"); // TODO refactor with json in request body String folder2 = getOrElse(request.params().get("folder"), ""); try {/*w w w . j a v a2 s.co m*/ folder2 = URLDecoder.decode(folder2, "UTF-8"); } catch (UnsupportedEncodingException e) { log.warn(e.getMessage(), e); } final String folder = folder2; if (ids != null && !ids.trim().isEmpty()) { JsonArray idsArray = new fr.wseduc.webutils.collections.JsonArray(Arrays.asList(ids.split(","))); String criteria = "{ \"_id\" : { \"$in\" : " + idsArray.encode() + "}"; if (owner != null) { criteria += ", \"to\" : \"" + owner + "\""; } criteria += "}"; mongo.find(collection, new JsonObject(criteria), new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> r) { JsonObject src = r.body(); if ("ok".equals(src.getString("status")) && src.getJsonArray("results") != null) { final JsonArray origs = src.getJsonArray("results"); final JsonArray insert = new fr.wseduc.webutils.collections.JsonArray(); final AtomicInteger number = new AtomicInteger(origs.size()); emptySize(user, new Handler<Long>() { @Override public void handle(Long emptySize) { long size = 0; for (Object o : origs) { if (!(o instanceof JsonObject)) continue; JsonObject metadata = ((JsonObject) o).getJsonObject("metadata"); if (metadata != null) { size += metadata.getLong("size", 0l); } } if (size > emptySize) { badRequest(request, "files.too.large"); return; } for (Object o : origs) { JsonObject orig = (JsonObject) o; final JsonObject dest = orig.copy(); String now = MongoDb.formatDate(new Date()); dest.remove("_id"); dest.remove("protected"); dest.remove("comments"); dest.put("application", WORKSPACE_NAME); if (owner != null) { dest.put("owner", owner); dest.put("ownerName", dest.getString("toName")); dest.remove("to"); dest.remove("from"); dest.remove("toName"); dest.remove("fromName"); } else if (user != null) { dest.put("owner", user.getUserId()); dest.put("ownerName", user.getUsername()); dest.put("shared", new fr.wseduc.webutils.collections.JsonArray()); } dest.put("_id", UUID.randomUUID().toString()); dest.put("created", now); dest.put("modified", now); if (folder != null && !folder.trim().isEmpty()) { dest.put("folder", folder); } else { dest.remove("folder"); } insert.add(dest); final String filePath = orig.getString("file"); if ((owner != null || user != null) && folder != null && !folder.trim().isEmpty()) { //If the document has a new parent folder, replicate sharing rights String parentName, parentFolder; if (folder.lastIndexOf('_') < 0) { parentName = folder; parentFolder = folder; } else if (filePath != null) { String[] splittedPath = folder.split("_"); parentName = splittedPath[splittedPath.length - 1]; parentFolder = folder; } else { String[] splittedPath = folder.split("_"); parentName = splittedPath[splittedPath.length - 2]; parentFolder = folder.substring(0, folder.lastIndexOf("_")); } folderService.getParentRights(parentName, parentFolder, owner, new Handler<Either<String, JsonArray>>() { public void handle(Either<String, JsonArray> event) { final JsonArray parentSharedRights = event.right() == null || event.isLeft() ? null : event.right().getValue(); if (parentSharedRights != null && parentSharedRights.size() > 0) dest.put("shared", parentSharedRights); if (filePath != null) { storage.copyFile(filePath, new Handler<JsonObject>() { @Override public void handle(JsonObject event) { if (event != null && "ok" .equals(event.getString("status"))) { dest.put("file", event.getString("_id")); persist(insert, number.decrementAndGet()); } } }); } else { persist(insert, number.decrementAndGet()); } } }); } else if (filePath != null) { storage.copyFile(filePath, new Handler<JsonObject>() { @Override public void handle(JsonObject event) { if (event != null && "ok".equals(event.getString("status"))) { dest.put("file", event.getString("_id")); persist(insert, number.decrementAndGet()); } } }); } else { persist(insert, number.decrementAndGet()); } } } }); } else { renderJson(request, src, 404); } } private void persist(final JsonArray insert, int remains) { if (remains == 0) { mongo.insert(DocumentDao.DOCUMENTS_COLLECTION, insert, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> inserted) { if ("ok".equals(inserted.body().getString("status"))) { incrementStorage(insert); for (Object obj : insert) { JsonObject json = (JsonObject) obj; createRevision(json.getString("_id"), json.getString("file"), json.getString("name"), json.getString("owner"), json.getString("owner"), json.getString("ownerName"), json.getJsonObject("metadata")); } renderJson(request, inserted.body()); } else { renderError(request, inserted.body()); } } }); } } }); } else { badRequest(request); } }
From source file:org.entcore.workspace.service.WorkspaceService.java
License:Open Source License
@Put("/documents/move/:ids/:folder") @SecuredAction(value = "workspace.manager", type = ActionType.RESOURCE) public void moveDocuments(final HttpServerRequest request) { final String ids = request.params().get("ids"); // TODO refactor with json in request body String tempFolder = getOrElse(request.params().get("folder"), ""); try {/* w w w . j a v a2 s .c o m*/ tempFolder = URLDecoder.decode(tempFolder, "UTF-8"); } catch (UnsupportedEncodingException e) { log.warn(e.getMessage(), e); } final String folder = tempFolder; final String cleanedFolder = folder.replaceAll(Pattern.quote("\\"), Matcher.quoteReplacement("\\\\")) .replaceAll(Pattern.quote("\""), Matcher.quoteReplacement("\\\"")); UserUtils.getUserInfos(eb, request, new Handler<UserInfos>() { @Override public void handle(UserInfos user) { if (user != null && user.getUserId() != null) { if (ids != null && !ids.trim().isEmpty()) { JsonArray idsArray = new fr.wseduc.webutils.collections.JsonArray( Arrays.asList(ids.split(","))); final String criteria = "{ \"_id\" : { \"$in\" : " + idsArray.encode() + "}}"; if (folder != null && !folder.trim().isEmpty()) { //If the document has a parent folder, replicate sharing rights String parentName, parentFolder; if (folder.lastIndexOf('_') < 0) { parentName = folder; parentFolder = folder; } else { String[] splittedPath = folder.split("_"); parentName = splittedPath[splittedPath.length - 1]; parentFolder = folder; } folderService.getParentRights(parentName, parentFolder, user, new Handler<Either<String, JsonArray>>() { public void handle(Either<String, JsonArray> event) { final JsonArray parentSharedRights = event.right() == null || event.isLeft() ? null : event.right().getValue(); String obj = "{ \"$set\" : { \"folder\": \"" + cleanedFolder + "\", \"modified\" : \"" + MongoDb.formatDate(new Date()) + "\""; if (parentSharedRights != null && parentSharedRights.size() > 0) obj += ", \"shared\" : " + parentSharedRights.toString() + " }}"; else obj += "}, \"$unset\" : { \"shared\": 1 }}"; mongo.update(DocumentDao.DOCUMENTS_COLLECTION, new JsonObject(criteria), new JsonObject(obj), false, true, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> r) { JsonObject res = r.body(); if ("ok".equals(res.getString("status"))) { renderJson(request, res); } else { renderJson(request, res, 404); } } }); } }); } else { String obj = "{ \"$set\" : { \"modified\" : \"" + MongoDb.formatDate(new Date()) + "\" }, " + " \"$unset\" : { \"folder\" : 1, \"shared\": 1 }}"; mongo.update(DocumentDao.DOCUMENTS_COLLECTION, new JsonObject(criteria), new JsonObject(obj), false, true, new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> r) { JsonObject res = r.body(); if ("ok".equals(res.getString("status"))) { renderJson(request, res); } else { renderJson(request, res, 404); } } }); } } else { badRequest(request); } } else { unauthorized(request); } } }); }
From source file:org.folio.auth.permissions_module.impl.MongoPermissionsStore.java
@Override public Future<JsonArray> getExpandedPermissions(String permission, String tenant) { //System.out.println("Permissions> Expanding permission '"+ permission + "' on tenant '"+ // tenant + "'"); JsonObject query = new JsonObject().put("permission_name", permission).put("tenant", tenant); JsonArray permList = new JsonArray(); Future<JsonArray> future = Future.future(); mongoClient.find("permissions", query, res -> { if (res.succeeded() && res.result().size() > 0) { //System.out.println("Permissions> Successfully queried mongo for '"+ permission + "' on tenant '"+ // tenant + "'"); /*/* ww w. j a v a 2 s .co m*/ If there are no subpermissions, go ahead and complete the future with the given value of the JsonArray If there are subpermissions, create a list of new futures, by calling walkPerms for each sub permission, then create a composite future from these new futures, with a handler that completes the original future when they return */ JsonObject permObj = res.result().get(0); permList.add(permission); JsonArray subPerms = permObj.getJsonArray("sub_permissions"); LinkedList<Future> futureList = new LinkedList<>(); if (subPerms != null && !subPerms.isEmpty()) { logger.debug("Permissions> " + subPerms.size() + " subs to process for '" + permission + "'"); for (Object o : subPerms) { String sub = (String) o; Future<JsonArray> newFuture = getExpandedPermissions(sub, tenant); futureList.add(newFuture); } logger.debug("Permissions> Creating CompositeFuture to expand " + permission + " into " + futureList.size() + " subs: " + subPerms.encode()); CompositeFuture compositeFuture = CompositeFuture.all(futureList); compositeFuture.setHandler(res2 -> { if (res2.succeeded()) { //Get output of contained futures and complete the future here for (Future f : futureList) { JsonArray arr = (JsonArray) f.result(); for (Object o : arr) { permList.add(o); } } future.complete(permList); } else { future.fail("Unable to populate permissions: " + res2.cause().getMessage()); } }); } else { //System.out.println("Permissions> No sub-permissions found for '" + permission + "'"); future.complete(permList); } } else { future.fail("No permission '" + permission + "' found for tenant '" + tenant + "'"); } }); return future; }
From source file:org.folio.auth.permissions_module.impl.MongoPermissionsStore.java
@Override public Future<Boolean> removePermissionFromUser(String user, String permission, String tenant) { JsonObject query = new JsonObject().put("username", user).put("tenant", tenant); Future<Boolean> future = Future.future(); mongoClient.find("users", query, res -> { if (res.failed() || res.result().size() < 1) { future.complete(false);/* w w w. j a v a 2 s . c om*/ } else { getPermissionsForUser(user, tenant, false).setHandler(res2 -> { if (res2.failed()) { future.fail("Unable to retrieve initial permissions: " + res2.cause().getMessage()); } else { JsonArray permissions = res2.result(); logger.debug("PERMISSIONS: " + permissions.encode()); if (!permissions.contains(permission)) { future.complete(true); } else { permissions.remove(permission); JsonObject update = new JsonObject().put("$set", new JsonObject().put("permissions", permissions)); mongoClient.updateCollection("users", query, update, res3 -> { if (res3.failed()) { future.fail("Unable to remove permission:" + res3.cause().getMessage()); } else { logger.debug("Permissions> Permission '" + permission + "' removed"); future.complete(true); } }); } } }); } }); return future; }
From source file:org.perfcake.reporting.destination.c3chart.C3ChartDataFile.java
License:Apache License
/** * Replaces the data file of the given chart with new data. * * @param chart/*from w w w .j a v a2s.c o m*/ * Chart meta-data. * @param target * Root path to an existing chart report. * @param newData * New data to be written. * @throws PerfCakeException * In case of an I/O error. */ C3ChartDataFile(final C3Chart chart, final Path target, final C3ChartData newData) throws PerfCakeException { this.chart = chart; this.target = target; writeDataHeader(); try (FileChannel dataOutput = FileChannel.open(getDataFile().toPath(), StandardOpenOption.APPEND);) { for (final JsonArray json : newData.getData()) { StringBuilder sb = new StringBuilder(); sb.append(chart.getBaseName()); sb.append(".push("); sb.append(json.encode()); sb.append(");\n"); dataOutput.write( ByteBuffer.wrap(sb.toString().getBytes(Charset.forName(Utils.getDefaultEncoding())))); } } catch (IOException e) { throw new PerfCakeException("Unable to write new chart data: ", e); } }
From source file:org.sfs.nodes.all.stats.GetClusterStats.java
License:Apache License
@Override public void handle(final SfsRequest httpServerRequest) { VertxContext<Server> vertxContext = httpServerRequest.vertxContext(); aVoid().flatMap(new Authenticate(httpServerRequest)) .flatMap(new ValidateActionAdminOrSystem(httpServerRequest)).map(aVoid -> httpServerRequest) .map(new ToVoid<>()).map(aVoid -> { ClusterInfo clusterInfo = vertxContext.verticle().getClusterInfo(); JsonArray jsonArray = new JsonArray(); for (TransientServiceDef node : clusterInfo.getAllNodes()) { jsonArray.add(node.toJsonObject()); }//from w ww .j a v a 2 s. c o m return jsonArray; }).single().subscribe(new Terminus<JsonArray>(httpServerRequest) { @Override public void onNext(JsonArray jsonArray) { Buffer encoded = buffer(jsonArray.encode().getBytes(UTF_8)); httpServerRequest.response().setStatusCode(HTTP_OK) .putHeader(CONTENT_LENGTH, valueOf(encoded.length())).write(encoded); } }); }
From source file:org.sfs.nodes.compute.account.GetAccount.java
License:Apache License
@Override public void handle(final SfsRequest httpServerRequest) { aVoid().flatMap(new Authenticate(httpServerRequest)) .flatMap(new ValidateActionAuthenticated(httpServerRequest)) .map(aVoid -> fromSfsRequest(httpServerRequest)).map(new ValidateAccountPath()) .map(objectPath -> objectPath.accountPath().get()) .flatMap(new LoadAccount(httpServerRequest.vertxContext())) .map(new ValidatePersistentAccountExists()).flatMap(new ListContainers(httpServerRequest)) .flatMap(containerList -> { HttpServerResponse httpServerResponse = httpServerRequest.response(); MultiMap headerParams = httpServerRequest.headers(); MultiMap queryParams = httpServerRequest.params(); String format = queryParams.get(FORMAT); String accept = headerParams.get(ACCEPT); Account account = containerList.getAccount(); Metadata metadata = account.getMetadata(); for (String key : metadata.keySet()) { SortedSet<String> values = metadata.get(key); if (values != null && !values.isEmpty()) { httpServerResponse.putHeader(format("%s%s", X_ADD_ACCOUNT_META_PREFIX, key), values); }//from www . j a v a2 s. com } httpServerResponse.putHeader(X_ACCOUNT_OBJECT_COUNT, valueOf(containerList.getObjectCount())); httpServerResponse.putHeader(X_ACCOUNT_CONTAINER_COUNT, valueOf(containerList.getContainerCount())); httpServerResponse.putHeader(X_ACCOUNT_BYTES_USED, BigDecimal.valueOf(containerList.getBytesUsed()).setScale(0, ROUND_HALF_UP).toString()); MediaType parsedAccept = null; if (!isNullOrEmpty(accept)) { parsedAccept = parse(accept); } if (equalsIgnoreCase("xml", format)) { parsedAccept = APPLICATION_XML_UTF_8; } else if (equalsIgnoreCase("json", format)) { parsedAccept = JSON_UTF_8; } httpServerResponse.setStatusCode(HTTP_OK); if (parsedAccept != null && JSON_UTF_8.is(parsedAccept)) { String charset = UTF_8.toString(); JsonArray array = new JsonArray(); for (SparseContainer container : ordered(containerList.getContainers())) { array.add(new JsonObject().put("name", container.getContainerName()) .put("count", container.getObjectCount()) .put("bytes", BigDecimal.valueOf(container.getByteCount()) .setScale(0, ROUND_HALF_UP).longValue())); } Buffer buffer = buffer(array.encode(), charset); httpServerResponse = httpServerResponse.putHeader(CONTENT_TYPE, JSON_UTF_8.toString()); httpServerResponse = httpServerResponse.putHeader(CONTENT_LENGTH, valueOf(buffer.length())); return AsyncIO.append(buffer, httpServerResponse); } else if (parsedAccept != null && APPLICATION_XML_UTF_8.is(parsedAccept)) { BufferOutputStream bufferOutputStream = new BufferOutputStream(); String charset = UTF_8.toString(); XMLStreamWriter writer = null; try { writer = newFactory().createXMLStreamWriter(bufferOutputStream, charset); writer.writeStartDocument(charset, "1.0"); writer.writeStartElement("account"); writer.writeAttribute("name", fromPaths(account.getId()).accountName().get()); for (SparseContainer container : ordered(containerList.getContainers())) { writer.writeStartElement("container"); writer.writeStartElement("name"); writer.writeCharacters(container.getContainerName()); writer.writeEndElement(); writer.writeStartElement("count"); writer.writeCharacters(valueOf(container.getObjectCount())); writer.writeEndElement(); writer.writeStartElement("bytes"); writer.writeCharacters(BigDecimal.valueOf(container.getByteCount()) .setScale(0, ROUND_HALF_UP).toString()); writer.writeEndElement(); writer.writeEndElement(); } writer.writeEndElement(); writer.writeEndDocument(); } catch (XMLStreamException e) { throw new RuntimeException(e); } finally { try { if (writer != null) { writer.close(); } } catch (XMLStreamException e) { LOGGER.warn(e.getLocalizedMessage(), e); } } Buffer buffer = bufferOutputStream.toBuffer(); httpServerResponse = httpServerResponse.putHeader(CONTENT_TYPE, APPLICATION_XML_UTF_8.toString()); httpServerResponse = httpServerResponse.putHeader(CONTENT_LENGTH, valueOf(buffer.length())); return AsyncIO.append(buffer, httpServerResponse); } else { String charset = UTF_8.toString(); Buffer buffer = buffer(); for (SparseContainer container : ordered(containerList.getContainers())) { buffer.appendString(container.getContainerName(), charset); buffer.appendString("\n", charset); } httpServerResponse = httpServerResponse.putHeader(CONTENT_TYPE, PLAIN_TEXT_UTF_8.toString()); httpServerResponse = httpServerResponse.putHeader(CONTENT_LENGTH, valueOf(buffer.length())); return AsyncIO.append(buffer, httpServerResponse); } }).single().subscribe(new ConnectionCloseTerminus<Void>(httpServerRequest) { @Override public void onNext(Void aVoid) { } }); }