Example usage for io.vertx.core.json JsonObject getJsonArray

List of usage examples for io.vertx.core.json JsonObject getJsonArray

Introduction

In this page you can find the example usage for io.vertx.core.json JsonObject getJsonArray.

Prototype

public JsonArray getJsonArray(String key) 

Source Link

Document

Get the JsonArray value with the specified key

Usage

From source file:io.flowly.auth.manager.BaseManager.java

License:Open Source License

/**
 * Revoke and grant permissions based on the specification.
 * Sequence - remove specified permissions, update specified permissions and then add specified permissions.
 *
 * @param vertex the node that represents a user or group vertex.
 * @param jsonObject JSON object representing the user or group permissions.
 */// w  ww.  j a v  a2  s  . c  o m
protected void redoPermissions(Vertex vertex, JsonObject jsonObject) {
    // Remove permissions.
    JsonArray permissionsToRemove = jsonObject.getJsonArray(Permission.PERMISSIONS_TO_REMOVE);
    if (permissionsToRemove != null) {
        graph.traversal().V(vertex).outE(Schema.E_HAS_PERMISSION).as("e").inV()
                .has(T.id, P.within(permissionsToRemove.getList().toArray())).<Edge>select("e").drop().toList();
    }

    // Update permissions.
    JsonArray permissionsToUpdate = jsonObject.getJsonArray(Permission.PERMISSIONS_TO_UPDATE);
    if (permissionsToUpdate != null) {
        for (Object prm : permissionsToUpdate) {
            Permission permission = new Permission((JsonObject) prm);
            Long resourceVertexId = permission.getResourceVertexId();

            graph.traversal().V(vertex).outE(Schema.E_HAS_PERMISSION).as("e").inV().has(T.id, resourceVertexId)
                    .<Edge>select("e").property(Schema.E_P_RWX, permission.getRWX()).toList();
        }
    }

    // Add permissions.
    JsonArray permissionsToAdd = jsonObject.getJsonArray(Permission.PERMISSIONS_TO_ADD);
    if (permissionsToAdd != null) {
        Set<Long> existingIds = new HashSet<>();
        Long[] idsToAdd = new Long[permissionsToAdd.size()];

        for (int i = 0; i < permissionsToAdd.size(); i++) {
            idsToAdd[i] = permissionsToAdd.getJsonObject(i).getLong(Permission.RESOURCE_VERTEX_ID);
        }

        graph.traversal().V(vertex).outE(Schema.E_HAS_PERMISSION).inV().has(T.id, P.within(idsToAdd))
                .sideEffect(s -> {
                    existingIds.add((Long) s.get().id());
                }).toList();

        grantPermissions(vertex, permissionsToAdd, existingIds);
    }

}

From source file:io.flowly.auth.manager.GroupManager.java

License:Open Source License

/**
 * Create a group node in the auth graph.
 *
 * @param group JSON object representing a group's attributes, permissions, users and memberships.
 *              Ex: {// www.j a va2s .  c o  m
 *                  "groupId": "Group 1",
 *                  "usersToAdd": [
 *                      13,
 *                      14
 *                  ],
 *                  "groupsToAdd": [
 *                      12343,
 *                      34567
 *                  ],
 *                  "permissionsToAdd": [
 *                      {
 *                          "resourceVertexId": 555611
 *                          "rwx": 7
 *                      }
 *                  ]
 *              }
 * @return an empty list or a list of validation errors based on whether the group was created or not.
 */
@Override
public JsonArray create(JsonObject group) {
    Group newGroup = new Group(group);
    JsonArray errors = newGroup.validate();

    if (errors.size() == 0) {
        try {
            Vertex groupVertex = graph.addVertex(T.label, Schema.V_GROUP, Schema.V_P_GROUP_ID,
                    newGroup.getGroupId());
            setPropertyValue(groupVertex, Schema.V_P_DESCRIPTION, newGroup.getDescription());

            grantMemberships(groupVertex, true, group.getJsonArray(Group.USERS_TO_ADD), null);
            grantMemberships(groupVertex, false, group.getJsonArray(User.GROUPS_TO_ADD), null);
            grantPermissions(groupVertex, group.getJsonArray(Permission.PERMISSIONS_TO_ADD), null);

            commit();
        } catch (Exception ex) {
            rollback();
            String error = "Unable to create group: " + newGroup.getGroupId();
            logger.error(error, ex);
            errors.add(error);
        }
    }

    return errors;
}

From source file:io.flowly.auth.manager.UserManager.java

License:Open Source License

/**
 * Calculate the effective permissions granted to the given user.
 * The effective permission on each resource is the cumulative grants
 * given to the user either directly or indirectly.
 *
 * @param user JSON object representing the user in the auth graph.
 *//*from   ww w. ja  v a  2 s  .  com*/
private void getEffectivePermissions(JsonObject user) {
    JsonArray effectivePermissions = new JsonArray();

    // Holds the resource Ids and their respective permissions that have the cumulative
    // grant value (simple integer - rwx).
    Map<String, JsonObject> definedPermissions = new HashMap<>();

    // Start with direct permissions.
    getEffectivePermissions(user.getJsonArray(Permission.DIRECT_PERMISSIONS), definedPermissions);

    // Check permissions defined on groups.
    JsonArray effectiveMemberships = user.getJsonArray(User.EFFECTIVE_MEMBERSHIPS);

    if (effectiveMemberships != null) {
        for (Object mbr : effectiveMemberships) {
            JsonObject membership = (JsonObject) mbr;

            getEffectivePermissions(membership.getJsonArray(Permission.DIRECT_PERMISSIONS), definedPermissions);
        }
    }

    for (JsonObject permission : definedPermissions.values()) {
        effectivePermissions.add(permission);
    }

    user.put(Permission.EFFECTIVE_PERMISSIONS, effectivePermissions);
}

From source file:io.flowly.engine.verticles.services.Email.java

License:Open Source License

private void registerEmailHandler() {
    vertx.eventBus().consumer(EngineAddresses.SEND_EMAIL, request -> {
        JsonObject mail = (JsonObject) request.body();
        MailMessage email = new MailMessage();

        try {//from  w  ww  .j a  va 2  s  . c om
            // TODO: Should "from" variable be configured per app or per call?
            email.setFrom("test@flowly.io");

            // TODO: Test multiple send to issue.
            // If emailTo is a string, create an array.
            Object emailTo = mail.getValue(JsonKeys.EMAIL_TO);

            if (emailTo instanceof String) {
                email.setTo((String) emailTo);
            } else {
                email.setTo(mail.getJsonArray(JsonKeys.EMAIL_TO).getList());
            }

            email.setSubject(mail.getString(JsonKeys.EMAIL_SUBJECT));
            email.setHtml(mail.getString(JsonKeys.EMAIL_BODY));

            mailClient.sendMail(email, result -> {
                if (result.succeeded()) {
                    if (logger.isInfoEnabled()) {
                        logger.info("Email: " + email.getSubject() + ", sent to: " + email.getTo());
                    }

                    JsonObject message = new JsonObject();
                    message.put(JsonKeys.RESULT, true);
                    request.reply(message);
                } else {
                    Failure failure = new Failure(6000, "Failed to send email.", result.cause());
                    logger.error(failure.getError(), failure.getCause());
                    request.fail(failure.getCode(), failure.getMessage());
                }
            });
        } catch (Exception ex) {
            Failure failure = new Failure(6001, "Unable to parse email message.", ex);
            logger.error(failure.getError(), failure.getCause());
            request.fail(failure.getCode(), failure.getMessage());
        }
    });
}

From source file:io.knotx.adapter.common.http.HttpAdapterConfiguration.java

License:Apache License

public HttpAdapterConfiguration(JsonObject config) {
    address = config.getString("address");
    services = config.getJsonArray("services").stream().map(item -> (JsonObject) item).map(item -> {
        ServiceMetadata metadata = new ServiceMetadata();
        metadata.path = item.getString("path");
        metadata.domain = item.getString("domain");
        metadata.port = item.getInteger("port");
        metadata.allowedRequestHeaderPatterns = item.getJsonArray("allowedRequestHeaders", new JsonArray())
                .stream().map(object -> (String) object).map(new StringToPatternFunction())
                .collect(Collectors.toList());
        return metadata;
    }).collect(Collectors.toList());
    clientOptions = config.getJsonObject("clientOptions", new JsonObject());
}

From source file:io.knotx.dataobjects.Fragment.java

License:Apache License

public Fragment(JsonObject fragment) {
    this.knots = fragment.getJsonArray(KNOTS_KEY).stream().map(String::valueOf).collect(Collectors.toList());
    this.content = fragment.getString(CONTENT_KEY);
    this.context = fragment.getJsonObject(CONTEXT_KEY, new JsonObject());
}

From source file:io.knotx.knot.action.ActionKnotConfiguration.java

License:Apache License

public ActionKnotConfiguration(JsonObject config) {
    this.address = config.getString("address");
    this.formIdentifierName = config.getString("formIdentifierName");
    this.adapterMetadataList = config.getJsonArray("adapters").stream().map(item -> (JsonObject) item)
            .map(item -> {/*w  w w.j a  v a  2 s .com*/
                AdapterMetadata metadata = new AdapterMetadata();
                metadata.name = item.getString("name");
                metadata.address = item.getString("address");
                metadata.params = item.getJsonObject("params", new JsonObject()).getMap();
                metadata.allowedRequestHeaders = item.getJsonArray("allowedRequestHeaders", new JsonArray())
                        .stream().map(object -> (String) object).map(new StringToPatternFunction())
                        .collect(Collectors.toList());
                metadata.allowedResponseHeaders = item.getJsonArray("allowedResponseHeaders", new JsonArray())
                        .stream().map(object -> (String) object).map(new StringToPatternFunction())
                        .collect(Collectors.toList());
                return metadata;
            }).collect(Collectors.toList());
}

From source file:io.knotx.knot.service.ServiceKnotConfiguration.java

License:Apache License

public ServiceKnotConfiguration(JsonObject config) {
    address = config.getString("address");
    services = config.getJsonArray("services").stream().map(item -> (JsonObject) item).map(item -> {
        ServiceMetadata metadata = new ServiceMetadata();
        metadata.name = item.getString("name");
        metadata.address = item.getString("address");
        metadata.params = item.getJsonObject("params");
        metadata.cacheKey = item.getString("cacheKey");
        return metadata;
    }).collect(Collectors.toList());
}

From source file:io.knotx.server.KnotxServerConfiguration.java

License:Apache License

public KnotxServerConfiguration(JsonObject config) {
    httpPort = config.getInteger("httpPort");
    splitterAddress = config.getJsonObject("splitter").getString("address");
    assemblerAddress = config.getJsonObject("assembler").getString("address");

    displayExceptionDetails = config.getBoolean("displayExceptionDetails", false);

    engineRouting = Maps.newEnumMap(HttpMethod.class);
    config.getJsonObject("routing").stream().forEach(this::parseMethodRouting);

    repositoryAddressMapping = Maps.newHashMap();
    config.getJsonArray("repositories").stream().map(item -> (JsonObject) item)
            .forEach(object -> repositoryAddressMapping.put(object.getString("path"),
                    new RepositoryEntry(object.getString("address"), object.getBoolean("doProcessing", true))));

    allowedResponseHeaders = config.getJsonArray("allowedResponseHeaders").stream()
            .map(item -> ((String) item).toLowerCase()).collect(Collectors.toSet());
}

From source file:io.knotx.util.MultiMapConverter.java

License:Apache License

/**
 * Converts MultiMap to JsonObject<br> It expects the MultiMap key, contains List of String
 * objects, so the result of conversion will look like below
 * <br>//ww w  . java  2s.  com
 * <pre>
 *   {
 *      "mapKey1": ["val1", "val2"],
 *      "mapKey2": ["val1"]
 *   }
 * </pre>
 *
 * @param multiMap - {@link MultiMap} to convert
 * @return - {@link JsonObject} with {@link JsonArray} under each object key
 */
public static JsonObject toJsonObject(MultiMap multiMap) {
    JsonObject json = new JsonObject();

    ((io.vertx.core.MultiMap) multiMap.getDelegate()).forEach(entry -> {
        JsonArray values;
        if (json.containsKey(entry.getKey())) {
            values = json.getJsonArray(entry.getKey());
        } else {
            values = new JsonArray();
            json.put(entry.getKey(), values);
        }
        values.add(entry.getValue());
    });

    return json;
}